1.n与W输反了
2.第14行
```cpp
for(int j=n;j>=0;j--)
```
应改为
```cpp
for(int j=W;j>=0;j--)
```
3.第16行
```cpp
max(bag[i-1][j-w[i]]+v[i],bag[i-1][j]);
```
应改为
```cpp
bag[i][j]=max(bag[i-1][j-w[i]]+v[i],bag[i-1][j]);
```
AC code:
```cpp
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n,W;
cin>>W>>n;
int bag[n+1][W+1];
int w[n+1]={0},v[n+1]={0};
memset(bag,0,sizeof(bag));
for(int i=1;i<=n;i++){
cin>>w[i]>>v[i];
}
for(int i=1;i<=n;i++){
for(int j=W;j>=0;j--){
if(j>=w[i]){
bag[i][j]=max(bag[i-1][j-w[i]]+v[i],bag[i-1][j]);
}else{
bag[i][j]=bag[i-1][j];
}
}
}
cout<<bag[n][W];
/*
W是背包重量,w是每个物品重量
*/
}
```
by Tirpitz__ @ 2021-06-06 10:55:48
@[LAL&KOBE](/user/446894)
by Tirpitz__ @ 2021-06-06 14:37:09
@[Tirpitz__](/user/64974) 谢谢
by cmathFPV @ 2021-06-07 08:25:04