@[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