这个是我一开始写出来的程序,只有四十分。
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
long long f[N];
int n,x;
int main()
{
cin>>n>>x;
for(int i=1;i<=n;++i)
{
int l,w,u;
cin>>l>>w>>u;
for(int j=x;j>=0;--j)
{
f[j]+=l;
if(j>=u) f[j]=max(f[j],f[j-u]+w);
}
}
cout<<5*f[x];
}
无奈百思不得其解,我先后翻看了题解与讨论版,最终改出了一个正确的代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
long long f[N];
int n,x;
int main()
{
cin>>n>>x;
for(int i=1;i<=n;++i)
{
int l,w,u;
cin>>l>>w>>u;
for(int j=x;j>=0;--j)
{
if(j>=u) f[j]=max(f[j]+l,f[j-u]+w);
else f[j]+=l;
}
}
cout<<5*f[x];
}
真正有区别的地方在于这里。
(上面是40的,下面是100的)
for(int j=x;j>=0;--j)
{
f[j]+=l;
if(j>=u) f[j]=max(f[j],f[j-u]+w);
}
for(int j=x;j>=0;--j)
{
if(j>=u) f[j]=max(f[j]+l,f[j-u]+w);
else f[j]+=l;
}
这两个分支在哪里有不同?请大佬指出。