10分,完全背包做法,求条
查看原帖
10分,完全背包做法,求条
1583885
WaNgTx_HK416楼主2025/7/24 21:32

我是按照完全背包的思路去做的 外层循环是枚举t 内层是枚举m 背包大小是t 物品种类是m 转移方程是dp[j] = max(dp[j], dp[j - w[i]] + v[i]); 顺便问一下有没有大佬能讲一下第一篇题解的w_i和v_i为什么要乘以2

#include<iostream>
using namespace std;
long long dp[10000005]; 
long long t, m;
long long w[10005], v[10005];
int main()
{
	scanf("%d%d", &t, &m);
	for(long long i = 1; i <= m; i ++)
	{
		scanf("%d%d", &w[i], &v[i]);
	}
	
	for(long long i = 1; i <= m; i ++)
	{
		for(long long j = 1; j <= t; j ++)
		{
			dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
		}
	}
	printf("%lld", dp[t]);
}

2025/7/24 21:32
加载中...