POJ7113:背包问题(Charm Bracelet)
题目地址
背包问题—地址
解法
- 解法原理类似于题目【神奇的口袋】,但不完全相同。
- 将问题抽象成 f [i][j]
代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Item{
int w,d;
};
Item items[3501];
int f[13001];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>items[i].w>>items[i].d;
}
for(int j=0;j<m;j++){
if(items[1].w<=j){
f[j]=items[1].d;
}
else{
f[j]=0;
}
}
for(int i=2;i<=n;i++){
for(int j=m;j>=0;j--){
if(j>=items[i].w){
f[j]=max(f[j],f[j-items[i].w]+items[i].d);
}
else{
f[j]=f[j];
}
}
}
cout<<f[m];
return 0;
}