```cpp
for(int j=0; j <= n;j++)
```
这一行改成这个,因为你用的是朴素版本的01背包,,不用担心状态覆盖,所以应该正着循环。
by Brilliant11001 @ 2023-07-19 15:39:48
@[lwliu](/user/875566)
by Brilliant11001 @ 2023-07-19 15:40:05
```
#include <bits/stdc++.h>
using namespace std ;
int w[30], v[30], dp[30005];
int main()
{
int m, n;
cin >> n >> m;
for(int i = 1; i <= m; i++)
cin >> w[i] >> v[i];
for(int i = 1; i <= m; i++)
for(int j = n; j >= w[i]; j--)
dp[j] = max(dp[j], dp[j - w[i]] + w[i] * v[i]);
printf("%d", dp[n]);
return 0 ;
}
```
这类似01背包模板啊,对着我的AC程序可以看一下
by ccg12345 @ 2023-07-19 15:42:03
@[lwliu](/user/875566) 哦,如果你用朴素版的话还要再if后加
```cpp
else dp[i][j] = d[i - 1][j];
```
by Brilliant11001 @ 2023-07-19 15:47:42
@[Brilliant11001](/user/602372)
感谢给你关注
by xixiangrui @ 2023-07-19 15:55:31
@[ccg12345](/user/793150)
谢谢给关注
by xixiangrui @ 2023-07-19 15:56:01
```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:56