Description
FJ is going to do some shopping, and before that, he needs some boxes to carry the different kinds of stuff he is going to buy. Each box is assigned to carry some specific kinds of stuff (that is to say, if he is going to buy one of these stuff, he has to buy the box beforehand). Each kind of stuff has its own value. Now FJ only has an amount of W dollars for shopping, he intends to get the highest value with the money.
Input
The first line will contain two integers, n (the number of boxes 1 <= n <= 50), w (the amount of money FJ has, 1 <= w <= 100000) Then n lines follow. Each line contains the following number pi (the price of the ith box 1<=pi<=1000), mi (1<=mi<=10 the number goods ith box can carry), and mi pairs of numbers, the price cj (1<=cj<=100), the value vj(1<=vj<=1000000)
Output
For each test case, output the maximum value FJ can get
SampleInput
3 800
300 2 30 50 25 80
600 1 50 130
400 3 40 70 30 40 35 60
SampleOutput
210

这个算法的思想为设立一个dp[i][j],j上面的数字表示已经花费的金额,i代表背包标号。dp[i][j]表示花费j金额时获得的价值
t(t>=j)为初始拥有的金钱是,准确的来讲dp[i][j]到dp[i][t]都等于dp[i][j]为花费j金额时获得的价值
这里又要纠正一个误区,当开始想这道题的时候想着分成一个盒子的情况和两个盒子的情况,依次类推。。。。
这就是没有动态规划的思想,用动态规划的思想是依次遍历每个箱子,用一个dp[][]来记录此时的最大价值,随着不断遍历每个箱子
这个dp[][]的值也会不断的得到更新(用max()函数更新)等到把所有的箱子遍历好后就是最优解。
dp遍历方式类似广度优先的遍历。
 #include<stdio.h>
#include<string.h>
#define wsize 100010
#define nsize 65
#define msize 11
int dp[nsize][wsize];
int n,t,box,num;
int max(int a,int b)
{
return a>b?a:b;
} int main ()
{
int i,j,k;
while(scanf("%d %d",&n,&t)!=EOF)
{
memset(dp,-,sizeof(dp)); //有依赖关系,要赋初值-1
memset(dp[],,sizeof(dp[])); //对于二维数组memset如果用dp则表示把二维数组的所有值赋值,如果用dp[0]则表示把第0行赋值
for(i=;i<=n;i++)
{
scanf("%d %d",&box,&num);
for(k=box;k<=t;k++)
dp[i][k]=dp[i-][k-box]; //先让i层买盒子,因为盒子没有价值,所以直接等于上一层的花费+盒子钱
for(j=;j<num;j++) //在已花费盒子钱的基础上,此时再对dp[i]层做01背包,即i层一个盒子多种物品的最大价值
{
int c,w;
scanf("%d %d",&c,&w);
for(k=t;k>=c;k--)
{
if(dp[i][k-c]!=-) //因为开始的时候box到t都已经赋值,这个是钱的范围,这时小于box的地方全是-1即不买大盒子是不能装有价值的小盒子
dp[i][k]=max(dp[i][k],dp[i][k-c]+w); // 这里不能dp[i][k]=max(dp[i][j],dp[i][k-box-c]+w)
//因为已经买过盒子了,这个表达式代表一个盒子基础上一个物品带一个盒子
}
}
for(j=;j<=t;j++)
{ // 当遍历完一个箱子以后,要把花费不用钱的价值和之前盒子作比较,取两者中最大的即局部最优,然后等待和下一组进行比较
dp[i][j]=max(dp[i][j],dp[i-][j]);
}
}
printf("%d\n",dp[n][t]);
}
return ;
}

Consumer的更多相关文章

  1. 天河微信小程序入门《四》:融会贯通,form表单提交数据库

    天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...

  2. 天河微信小程序入门《三》:打通任督二脉,前后台互通

    原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https ...

  3. 《社交网络》里的评分公式——ELO排名系统

    <社交网络>里的Mark Zackburg被女朋友甩后,在舍友的启发下,充分发挥了技术宅男自娱自乐的恶搞天分,做出了Facemash网站,对学校女生的相貌进行排名打分,结果网站访问流量过大 ...

  4. 原创:从零开始,微信小程序新手入门宝典《一》

    为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...

  5. 《InsideUE4》GamePlay架构(十)总结

    世界那么大,我想去看看 引言 通过对前九篇的介绍,至此我们已经了解了UE里的游戏世界组织方式和游戏业务逻辑的控制.行百里者半九十,前述的篇章里我们的目光往往专注在于特定一个类或者对象,一方面固然可以让 ...

  6. 《InsideUE4》-8-GamePlay架构(七)GameMode和GameState

    我的世界,我做主 引言 上文我们说到在Actor层次,UE用Controller来充当APawn的逻辑控制者,也有了可以接受玩家输入的PlayerController,和能自行行动的AIControl ...

  7. 《InsideUE4》-7-GamePlay架构(六)PlayerController和AIController

    PlayerController:你不懂,伴君如伴虎啊 AIController:上来,我自己动 引言 上文我们谈到了Component-Actor-Pawn-Controller的结构,追溯了ACo ...

  8. 《InsideUE4》-6-GamePlay架构(五)Controller

    <InsideUE4>-6-GamePlay架构(五)Controller Tags: InsideUE4 GamePlay 那一天 Pawn又回想起了 被Controller所支配的恐惧 ...

  9. 《InsideUE4》-5-GamePlay架构(四)Pawn

    <InsideUE4>-5-GamePlay架构(四)Pawn Tags: InsideUE4 我像是一颗棋 进退任由你决定 我不是你眼中唯一将领 却是不起眼的小兵 引言 欢迎来到Game ...

  10. 面试题目——《CC150》树与图

    面试题4.1:实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个结点,其两颗子树的高度差不超过1. 思路:两个方法,第一种速度较快 package cc150; public ...

随机推荐

  1. CSS3动画效果之Transform

    无意中翻看博客发现这个属性,就顺便熟悉了一下,百度了一下和查看了CSS3帮助文档,特整理一下 Transform 适应于对任一DOM元素的2D或3D转换,转换效果有:旋转.拉伸.平移.倾斜等. 目前浏 ...

  2. 6、javac命令详解

    javac [ options ] [ sourcefiles ] [ @files ] 参数可按任意次序排列. options 命令行选项. sourcefiles 一个或多个要编译的源文件(例如 ...

  3. OpenWrt的开机启动服务(init scripts)

    参考 https://wiki.openwrt.org/doc/techref/initscripts 以一个简单的例子来说明 #!/bin/sh /etc/rc.common # Example s ...

  4. Java中初级数值类型的大小, volatile和包装类wrapped type的比较

    Java中的初级数值类型 Java是静态类型语言, 所有的变量必须先声明再使用. 其初级类型一共8种: boolean: 数据只包含1bit信息, 但是占空间为8-bit, 默认值为false byt ...

  5. iOS支付宝支付集成

    概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...

  6. 6款国内、国外开源PHP轻论坛CMS程序

    随着移动互联网对于传统互联网的冲击,用户群更加注重信息的及时性和有效性的简便分享和获取,传统的社区模式经过多年的积累沉淀很深,尤其对于新兴的社区用户群和站长来说,如果需要挑战目前已经非常成熟的社区群还 ...

  7. hdu 4412 Sky Soldiers(区间DP)

    Sky Soldiers Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  8. Android API之android.provider.ContactsContract

    android.provider.ContactsContract ContactsContract是联系人provider和app的contract.定义了已支持的URL和column.取代了之前的 ...

  9. 【laravel5.4】vue分页删除

    1.a标签执行ajax删除,后台删除成功后,执行vue分页对象删除对应数据 VUE.js

  10. mysql中的order by

    一.order by的原理 1.利用索引的有序性获取有序数据 当查询语句的 order BY 条件和查询的执行计划中所利用的 Index 的索引键(或前面几个索引键)完全一致,且索引访问方式为 ran ...