来源POJ3624
继续继续。。。前面把字典树写了两题,下面来两题背包。
背包最基础的题目,01背包。。。
我直接在代码上面注释吧?
AC代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
struct Stone{
int v;//体积
int p;//价格
}s[100100];
int c[100100];
int m(int a,int b){
if(a>b)return a;
else return b;
}//比较的一个
int main(){
int n,con;
long long ans=0;
while(scanf("%d%d",&n,&con)!=EOF){
memset(c,0,sizeof(c));
int i=0,j;
for(i=0;i<n;i++)
cin>>s[i].v>>s[i].p;
for(i=0;i<n;i++){
for(j=con;j>=s[i].v;j--)
c[j]=m(c[j],c[j-s[i].v]+s[i].p);//详见动态转移方程
/*用一个dp[]数组来作为标记的,其实有记录下所有搜索情况的意思。。。*/
}
cout<<c[con]<<endl;
}
return 0;
}