HDU 1712 ACboy needs your help(包背包)

pid=1712">http://acm.hdu.edu.cn/showproblem.php?

pid=1712

题意:

小杰有m天的时间去上n门不同的课. 对于第i门课来说, 假设小杰花j天的时间在该课上, 那么小杰能够获得val[i][j]的价值. 如今给出矩阵val[n][m], 要你求出小杰能获得的最大价值和?

分析:

咋一看, n门课, m天的时间, 要我们求最大价值. 那么明显是从n门课中选出合适的几门, 是的总花费的时间<=m的前提下, 价值最大化. 可是发现每门课有m种不同的价值获取方式.

所以我们换一种问题描写叙述方式: 有n组物品, 每组物品有m个且每组物品中最多仅仅能选1个物品. 第i组物品的花费分别为1 2 3 …m, 第i组物品的价值分别为val[i][1], val[i][2]…val[i][m]. 如今问你初始金钱为m时, 通过上面n组物品, 最多能获得多少价值的物品?

上面问题就是一个明显的分组背包问题了. 我们令dp[i][j]==x表示仅仅选前i组物品且总花费<=j时, 能获得的最大价值为x.

初始化: dp全为0.

状态转移: dp[i][j] == max( dp[i-1][j] , dp[i-1][j-cost[k]]+val[k])

当中cost[k]和val[k]指的是第i组物品的第k个物品的花费和价值.

上面公式前者表示第i组物品一个都不选, 后者表示第i组物品选1个.

终于所求: dp[n][m]的值.

注意: dp递推的3层循环的相互顺序不能改变, 否者会错.(能够自己想一想为什么是这种循环顺序).程序用的滚动数组, dp仅仅有一维.

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100+5; int n;//n组物品
int m;//初始金钱数和每组中物品数目
int cost[maxn][maxn];
int val[maxn][maxn];
int dp[maxn]; int main()
{
while(scanf("%d%d",&n,&m)==2 && n)
{
//读取输入
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%d",&val[i][j]);
cost[i][j]=j;
} //递推过程
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)//第i组
for(int j=m;j>=0;j--)//<=j花费时
for(int k=1;k<=m;k++)//第i组的第k个物品
{
if(j>=cost[i][k])
dp[j] = max(dp[j], dp[j-cost[i][k]]+val[i][k]);
} //输出结果
printf("%d\n",dp[m]);
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

HDU 1712 ACboy needs your help(包背包)的更多相关文章

  1. HDU 1712 ACboy needs your help (分组背包模版题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 有n门课,和m天时间.每门课上不同的天数有不同的价值,但是上过这门课后不能再上了,求m天里的最大 ...

  2. hdu 1712 ACboy needs your help 分组背包

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 Problem ...

  3. HDU 1712 ACboy needs your help 典型的分组背包

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 ACboy needs your help Time Limit: 1000/1000 MS ( ...

  4. HDU 1712 ACboy needs your help(分组背包入门题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意: 有个人学习n门课程,a[i][j]表示用j分钟学习第i门课程所能获得的价值,背包容量为一共有m时间 ...

  5. 分组背包 例题:hdu 1712 ACboy needs your help

    分组背包需求 有N件物品,告诉你这N件物品的重量以及价值,将这些物品划分为K组,每组中的物品互相冲突,最多选一件,求解将哪些物品装入背包可使这些物品的费用综合不超过背包的容量,且价值总和最大. 解题模 ...

  6. HDU 1712 ACboy needs your help(分组背包)

    题意:给你n的课程组,每个课程组有m个课程,每个课程有一个完成时间与价值.问在m天内每组课程组最多选择一个,这样可以得到的最大价值是多少 题解:分组背包,其实就是每个课程组进行01背包,再在课程组内部 ...

  7. HDU - 1712 - ACboy needs your help 【分组背包】

    <题目链接> 题目大意:有n个课程,现在花M天来学习这些课程,学习每个课程花的天数所得到的价值不同,求M天怎么分配学习才能得到的价值最大.(这些课程得到的价值和所花天数的关系由矩阵给出) ...

  8. HDU 1712 ACboy needs your help AC男需要你的帮助 (分组的背包)

    分组背包问题:有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].这些物品被划分为若干组,每组中的物品互相冲突,最多选一件.求解将哪些物品装入背包可使这些物品的体积总和不超过背 ...

  9. hdu 1712 ACboy needs your help

    ACboy needs your help Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

随机推荐

  1. C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。

    原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Phone App时,需要取得萤幕的大小来自定义最佳化控制项的大小,但是开如何取得萤 ...

  2. SQLServer 网络协议(一)

    SQLserver现在主要的3种协议:Shared Memory.TCP/IP 和 Named Pipe SharedMemory: Shared Memory最快最简单的协议,使用SharedMem ...

  3. 【Android先进】查看手机记忆库状态和应用方法

    一世 我们知道.android程序存储器通常被限制16M.当然,24M的,和android程序存储器分为2部分:native和dalvik.dalvik 就是我们寻常说的java堆.我们创建的对象是在 ...

  4. shell文字过滤程序(十):cut命令

    [版权声明:转载请保留源:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] cut指挥类似至awk,从行内提取的信息,它是一个较弱的版本的功能 ...

  5. HDU 3681 BFS&amp;像缩进DP&amp;二分法

    N*M矩阵.从F出发点.走完全部Y点.每个人格开支1电源点,去G点,电池充满,D无法访问.最小的开始问什么时候满负荷可以去完全部Y.Y和G总共高达15一 第一BFS所有的F.Y.G之间的最短距离. 然 ...

  6. [转载][NAS] 使用win8的“存储池”功能~

    之前自己用DQ77KB搭建一个小存储系统(帖子链接:http://www.chiphell.com/thread-567753-1-1.html),一直使用intel主板带的软RAID功能构建RAID ...

  7. 【原创】纯OO:从设计到编码写一个FlappyBird (六)

    第五部分请看这里 终于到了最后一个部分了! 这里使用SimpleJudge类来实现Judge接口. 首先是SimpleJudge需要的实例变量: 0.final LinkedList<Pilla ...

  8. Android系统开发(2)——GDB调试工具

    调试的过程 我们在eclipse中来看一下一般调试的过程: 1.debug模式编译 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iY ...

  9. svn加入新的文件夹

    方法一: 1.在远程server上生成新的文件夹 svn mkdir http://svn.xxx.com/svn/mobile/strategy/assistant/branches/talk -m ...

  10. OPhone SDK初体验

    OPhone SDK初体验 write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 背景说明 中国伟大的垄断龙头,世界上也是顶尖的中移动最 ...