AcWing 603. 打怪兽
原题链接
中等
作者:
fairydetail
,
2019-04-29 21:10:39
,
所有人可见
,
阅读 1158
C++ 代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=60,M=2*N;
LL d[N];
int p[N];
LL f[N][M];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>d[i];
}
for(int i=1;i<=n;i++)
{
cin>>p[i];
}
memset(f,-1,sizeof(f));
f[0][0]=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=2*i;j++)
{
if(j>=p[i]&&f[i-1][j-p[i]]!=-1)
f[i][j]=f[i-1][j-p[i]]+d[i];
if(f[i-1][j]!=-1&&f[i-1][j]>=d[i])
f[i][j]=max(f[i][j],f[i-1][j]);
}
}
int res=0;
for(int j=1;j<=2*n;j++)
{
if(f[n][j]!=-1)
{
res=j;
break;
}
}
cout<<res<<endl;
return 0;
}