请求大佬帮忙(全WA)

P1060 [NOIP2006 普及组] 开心的金明

@[LF_LYX_SJXD](/user/742721) 你第二个循环交换是什么意思?没看懂
by while_true @ 2023-07-11 14:18:38


@[while_true](/user/661294) 根据重要度排的(sort不知道能不能用二维,两个一维无法用sort保证同步)
by LF_LYX_SJXD @ 2023-07-11 14:35:58


一,都动态规划了为什么还要排序,你大概没有理解动态规划的思想,建议再学习。 二,而且你转移方程也有问题,`f[j]=max(f[j],f[j-num[i][0]]*num[i][1]);`这一行,应该是`f[j]=max(f[j],f[j-num[i][0]]+num[i][0]*num[i][1]);` 三,为什么要取maxx?最终答案肯定为f[n],因为这个一定是之前转移过来的最大值。 $$\red{\text{学习动态规划,一定要理解思想再做题,切勿囫囵吞枣!}}$$
by while_true @ 2023-07-11 15:06:13


@[LF_LYX_SJXD](/user/742721)
by while_true @ 2023-07-11 15:43:18


附上代码 ```cpp #include <bits/stdc++.h> using namespace std; int w[31],c[31],f[50001]; int main(){ int m,n; cin >> m >> n; for(int i = 1;i <= n;i++){ cin >> w[i] >> c[i]; c[i] *= w[i]; } for(int i = 1;i <= n;i++){ for(int j = m;j >= w[i];j--){ f[j] = max(f[j],f[j-w[i]] + c[i]); } } cout << f[m]; return 0; } ```
by lucas_777 @ 2023-07-30 18:34:31


|