问&求证
查看原帖
问&求证
1026751
Lawrenceling楼主2024/9/2 20:42

求 dpidp_i 只会在某一年更改,之后保持固定。

如 dp[10000]dp[10000] 在第一年被更改,那么第二年、第三年及以后,dp[10000]dp[10000] 的值都不会改变。

那么就不必清空 dp 数组,下一轮循环资金数也从 上一轮的 mm 开始。

代码(0pts):

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N=40+10;
const int M=5e6+10;
int w[N],v[N],dp[M];
int m,s,n,cnt=1;


signed main()
{
	scanf("%lld%lld%lld",&m,&s,&n);
	for(int i=1;i<=n;++i)
	{
		scanf("%lld%lld",&w[i],&v[i]);
	}
	for(int i=1;i<=s;++i)
	{
		for(int j=1;j<=n;++j)
		{
			for(int k=max(cnt,w[j])/*这里*/
			{
				dp[k]=max(dp[k],dp[k-w[j]]+v[j]);
			}
		}
		m+=dp[m];
		cnt=m;//这里
	}
	printf("%lld",m);
	return 0;
}

可惜这样是 WA 的。

求证实或证伪,问题很 rg 不要喷谢谢qwq。

2024/9/2 20:42
加载中...