Submission #1246377

#TimeUsernameProblemLanguageResultExecution timeMemory
1246377trideserUplifting Excursion (BOI22_vault)C++20
5 / 100
5092 ms19856 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	int M, L;
	cin >> M >> L;
	int zindex = 500000;
	vector<int> maxcount(1000001, -1);
	vector<int> pieces(2 * M + 1);
	if(L + zindex < 0 || L + zindex >= 1000001) {
		cout << "impossible\n";
		return 0;
	}
	maxcount[zindex] = 0;
	for(int i = 0; i < 2 * M + 1; i++) {
		cin >> pieces[i];
	}
	vector<int> valid = {zindex};
	for(int i = -M, ix = 0; i <= M; i++, ix++) {
		vector<int> newmaxcount = maxcount;
		vector<int> newvalid = valid;
		//for(int j = 0; j < maxcount.size(); j++) {
		for(int j : valid) {
			if(maxcount[j] == -1)
				continue;
			for(int k = 1; k <= pieces[ix]; k++) {
				if(newmaxcount[j + k * i] == -1)
					newvalid.push_back(j + k * i);
				newmaxcount[j + k * i] = max(newmaxcount[j + k * i], maxcount[j] + k);
			}
		}
		valid = newvalid;
		maxcount = newmaxcount;
	}
	if(maxcount[L + zindex] == -1)
		cout << "impossible\n";
	else
		cout << maxcount[L + zindex] << "\n";
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...