求debug 有NN件物品和一个强度WW的背包

有NN件物品和一个强度WW的背包. 第ii个物品重量w_iw

选择若干个物品放入背包, 但是总重量不能超过背包强度WW.
求出可以放入背包的物品总价值的最大值.

img



```c++
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,W,c[105],w[105],v[105],sumw=0,sumv=0,maxv=0;
void search(int p)
{
    if(p>n)
    {
        sumw=sumv=0;
        for(int i=1;i<=n;i++)
        {
            if(c[i]==1)
            {
                sumw+=w[i];
                sumv+=v[i];
            }
            
        }
        if(sumw<=W)
        {
            maxv=max(sumv,maxv);
        }
        return ;
    }
    for(int i=0;i<=1;i++)
    {
        c[p]=i;
        search(p+1);
    }
}
int main() {
    cin>>n>>W;
    for(int i=1;i<=n;i++)
    {
        cin>>w[i]>>v[i];
    }
    sumv=sumw=0;
    search(1);
    cout<<maxv;
    return 0;
}


```

那个OJ

这道题不应该是dp背包题吗

#include<iostream>
using namespace std;
int dp[40][210]; 
int w[40],c[40];
int main(){
    int m,n;
    cin>>m>>n;
    for(int i=1;i<=n;i++)
        cin>>w[i]>>c[i];
    for(int i=1;i<=n;i++){
        for(int v=m;v>0;v--){
            if(w[i]>v) 
            dp[i][v]=dp[i-1][v]; 
            else 
            dp[i][v]=max(dp[i-1][v],dp[i-1][v-w[i]]+c[i]);
    }
    }
    cout<<dp[n][m];
    return 0;
}