BZOJ 1606 USACO 2008 Dec. 购买干草
【题意概述】
有n件物品,每件物品有体积Vi,背包容量为C,问最多可以装多少体积的物品
【题解】
显然是个无限背包嘛。。
直接做背包DP就好
注意无限背包的写法和01背包的区别
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=100010; 5 int f[maxn],v[maxn],n,c,ans=0; 6 void read(int &k){ 7 k=0; int f=1; char c=getchar(); 8 while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar(); 9 while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar(); 10 k*=f; 11 } 12 int main(){ 13 read(c); read(n); 14 for (int i=1;i<=n;i++) read(v[i]); 15 for (int i=1;i<=n;i++) 16 for (int j=v[i];j<=c;j++) 17 f[j]=max(f[j],f[j-v[i]]+v[i]),ans=max(ans,f[j]); 18 return printf("%d\n",ans),0; 19 }