#include<bits/stdc++.h>
#define int long long
using namespace std;
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int m,l;
cin >> m>> l;
vector<int> a(m+1);
int sifir = 0;
int sum = 0;
vector<int> eksi(m+1);
for(int i=m;i>=1;i--) cin >> eksi[i];
cin >> sifir;
for(int i=1;i<=m;i++)
{
cin >> a[i];
}
int cur = 0,cnt=0;
vector<int> var(m+1,0);
for(int i=1;i<=m;i++)
{
int num = a[i]*i;
if(num+cur<=l+m)
{
cur+=num;
cnt+=a[i];
var[i] = a[i];
a[i] = 0;
}
else
{
int istek = l+m-cur;
istek/=i;
cur+= i*istek;
cnt+=istek;
var[i] = istek;
a[i]-=istek;
}
}
if(cur<l-m*m)
{
cout << "impossible" << endl;
return 0;
}
cur-=l;
cur+=m*m;
//cout << cur << " "<< cnt << endl;
vector<int> dp(2*m*m+1,0);
dp[cur] = cnt;
for(int i=1;i<=m;i++)
{
//cout << i << endl;
for(int num = 1;num<=min(m,var[i]);num++)
{
for(int cur = 0;cur<=2*m*m-i;cur++)
{
if(dp[cur+i]!=0)
{
dp[cur] = max(dp[cur],dp[cur+i]-1);
}
}
}
for(int num=1;num<=min(m,a[i]);num++)
{
for(int cur = 2*m*m;cur>=i;cur--)
{
if(dp[cur-i]!=0)
{
dp[cur] = max(dp[cur],dp[cur-i]+1);
}
}
}
}
if(l!=0 && dp[m*m]==0)
{
cout << "impossible" << endl;
}
else cout << sifir+dp[m*m] << endl;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |