码迷,mamicode.com
首页 > 其他好文 > 详细

01背包

时间:2015-04-12 11:56:47      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:

有n个物品,每个物品的重量为weight[i],每个物品的价值为value[i]。现在有一个背包,它所能容纳的重量为total,问:当你面对这么多有价值的物品时,你的背包所能带走的最大价值是多少?

题解:关键在于状态方程。

代码:

 1 #include<stdio.h>
 2 #define MAX 1000
 3 int max(int a,int b)
 4 {
 5     return a>b?a:b;
 6 }
 7 int main()
 8 {
 9     int n,m,w[MAX],v[MAX],i,j,dp[MAX];  
10     printf("背包容量:");
11     scanf("%d",&m);
12     printf("物品个数:");
13     scanf("%d",&n);
14     printf("每个物品的重量和价值:\n");
15     for(i=1;i<=n;i++)
16         scanf("%d%d",&w[i],&v[i]);
17     for(i=1;i<=n;i++)
18         for(j=m;j>=w[i];j--)
19             dp[j]=max(dp[j],v[i]+dp[j-w[i]]);     //dp[j]表示重量为j的背包中所装物品的最大价值(dp数组元素的值表示价值,下标j表示重量)
20     printf("最大价值为:%d\n",dp[m]);
21     return 0;
22 }

 

01背包

标签:

原文地址:http://www.cnblogs.com/jasonlixuetao/p/4419213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!