有NN件物品和一个强度WW的背包. 第ii个物品重量w_iw
选择若干个物品放入背包, 但是总重量不能超过背包强度WW.
求出可以放入背包的物品总价值的最大值.
```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;
}