背包(采药)

来源:互联网 发布:绝对争锋网络剧在线 编辑:程序博客网 时间:2024/05/29 03:09
有n件物品和一个容量为c的背包。第i件物品的重量是w[i],价值是 v[i]。求解将哪些物品装入背包可使这些物品的重量和不超过背包容量,且价值总和最大。输出总价值。

Sample Input

130 10

54 68

4 58

85 67

1 6

35 64

84 57

7 98

57 75

36 96

72 5

 

70 3

71 100

69 1

1 2

Sample Onput

333

3

 

 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<cstdlib> 6 using namespace std; 7 int g[100][1000]; 8 int main() 9 {10     int c,n;11     while(~scanf("%d%d",&c,&n))12     {13         int i,j,w,v;14         scanf("%d%d",&w,&v);15         for(i=1;i<=w;i++)16         g[1][i]=0;17         for(i=w;i<=c;i++)18         g[1][i]=v;19         for(i=2;i<=n;i++)20         {21             scanf("%d%d",&w,&v);22             for(j=1;j<=c;j++)23             {24                 if(j<w)25                 g[i][j]=g[i-1][j];26                 else27                 g[i][j]=max(g[i-1][j-w]+v,g[i-1][j]);28             }29         }30         printf("%d\n",g[n][c]);31     }32     return 0;33 }
View Code

 

原创粉丝点击