我是按照完全背包的思路去做的
外层循环是枚举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]);
}