Submission #701337

#TimeUsernameProblemLanguageResultExecution timeMemory
701337angelo_torresUplifting Excursion (BOI22_vault)C++17
5 / 100
1041 ms828 KiB
#include <bits/stdc++.h>

using namespace std;
const int N = 63750;
const int inf = 1e9;
int m,l,a[300],dp[N*2+10];

int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> m >> l;
	for(int i = -m; i <= m; ++i) cin >> a[i+50];
	for(int i = -N; i <= N; ++i) dp[i+N] = -inf;
	dp[0+N] = 0;
	set<int> s;
	s.insert(0);
	for(int i = -m; i <= m; ++i){
		for(int j = 0; j < a[i+50]; ++j){
			if(i > 0) for(int k = N; k >= -N; k--){
				if(k-i < -N || k-i > N) continue;
				dp[k+N] = max(dp[k+N],dp[k-i+N]+1);
			}
			else for(int k = -N; k <= N; ++k){
				if(k-i < -N || k-i > N) continue;
				dp[k+N] = max(dp[k+N],dp[k-i+N]+1);
			}
			// for(int k = -5; k <= 5; ++k) cout << dp[N+k] << " ";
			// cout << "\n";
		}
	}
	if(l < -N || l > N || dp[l+N] < 0){
		cout << "impossible\n";
	}else{
		cout << dp[l+N] << "\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...