【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108444
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

【问题描述】
在《Harry Potter and the Deathly Hallows》中,Harry Potter他们一起逃亡,现在有许多的东西要放到赫敏的包里面,但是包的大小有限,所以我们只能够在里面放入非常重要的物品,现在给出该种物品的数量、体积、价值的数值,希望你能够算出怎样能使背包的价值最大的组合方式,并且输出这个数值,赫敏会非常地感谢你。
出自:宜昌一中

input:
【输入】
(1)第一行有2个整数,物品种数n和背包装载体积v。
(2)2行到n+1行每行3个整数,为第i种物品的数量m、体积w、价值s。.

output:
【输出】
仅包含一个整数,即为能拿到的最大的物品价值总和。

input:
【输入样例】       
2 10
3 4 3
2 2 5

output:
13
【注释】
选第一种一个,第二种两个。
结果为3*1+5*2=13


【参考程序】:

#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
int n,v,k,m,w,s,i,j;
int f[2010];
int main()
{
    scanf(
"%d%d",&n,&v);
    
for (i=0;i<=v;i++) f[i]=0;
    
for (k=1;k<=n;k++)
    {
        scanf(
"%d%d%d",&m,&w,&s);
        
bool bk=false;
        
for (i=1;i<=m;i++)
        {
            
for (j=v;j>=w;j--)
              
if (f[j-w]+s>f[j])
              {
                f[j]
=f[j-w]+s;
                bk
=true;/*减枝,因为物品是一样的当前的填不了那么后面的物品也无法无法填补所以break*/
              }
            
if (!bk) break;
        }
    }
    printf(
"%d\n",f[v]);
    
return 0;
}
posted on 2009-03-29 08:36 开拓者 阅读(209) 评论(0)  编辑 收藏 引用 所属分类: 动态规划&背包

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理