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 } 
View Code
posted @ 2017-11-02 17:30  Driver_Lao  阅读(123)  评论(0编辑  收藏  举报