40分,对于if分支判断有一点问题
查看原帖
40分,对于if分支判断有一点问题
744404
liuxiaoyu123楼主2023/7/27 12:33

这个是我一开始写出来的程序,只有四十分。

#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;
}

这两个分支在哪里有不同?请大佬指出。

2023/7/27 12:33
加载中...