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

题意:

  要用m天的时间来学n门课程,给出一个v[n][m]的矩阵,v[i][j]代表的是花j天的时间学习第i门课程所获得的价值,求能获得的最大价值?(当然同一门课不可多次修读)

思路:

  很裸的分组背包。有点类似于01背包,那就转成01背包的思想。

  第1层循环是“组”,第2层循环是当前背包容量(即m天),第3层循环是该组内的每件物品。说点容易懂的话,每组中只能选1件,那么有多少组就是最多就是多少件了,但是由于背包容量的限制,可能放不下这么多件,那还得再考虑一下搭配问题,所以任意一组也可以不选。那么问题就是在第 i 组中挑还是不挑,若挑,要挑哪一件的问题了?

看伪码(这样可以保证同组至多挑一件):

for 所有的组k  //组
    for v=V..0  //当前背包容量
        for 所有的物品i属于组k  //组内物品
            f[v]=max{f[v],f[v-c[i]]+w[i]}  //时刻要保证v-c[i]>=0,总不能让数组的下标为负数吧?

  如果每组仅有1件物品,也就是可以撤掉第3层循环,那么就是01背包了。但是这里由于有每组由任意多件物品,为了保证同组内只装1件,所以先考虑完此组后再考虑别的组;考虑完用没有装此组的状态去更新装了此组的状态。

 78MS

 #include <bits/stdc++.h>
#define num 105
using namespace std;
int a[num][num];
int dp[num];
void cal(int n,int m)
{
int i,j,t;
for(i=;i<n;i++) //组
for(j=m;j>;j--) //当前背包容量
for(t=;t<=j;t++) //同一组内的所有物品,刚好每组m个
dp[j]=max( dp[j] , dp[j-t]+a[i][t-] );
}
void main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m),n!=) //n门课,m天
{
for(i=;i<n;i++)
for(j=;j<m;j++)
scanf("%d",&a[i][j]);
cal(n,m);
printf("%d\n",dp[m]);
memset(a,,sizeof(a)); //清内存。
memset(dp,,sizeof(int)*(m+)); //清内存
}
}

AC代码

HDU 1712 ACboy needs your help AC男需要你的帮助 (分组的背包)的更多相关文章

  1. HDU 1712 ACboy needs your help(包背包)

    HDU 1712 ACboy needs your help(包背包) pid=1712">http://acm.hdu.edu.cn/showproblem.php? pid=171 ...

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

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

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

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

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

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

  5. hdu 1712 ACboy needs your help

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

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

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

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

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

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

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

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

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

随机推荐

  1. 《JavaScript语言精粹》第二章-语法 简单笔记

    注释 JavaScript提供两种注释: /* */包围的块注释及//开头的行注释. 注释应该被优先用来提高程序的可读性,注释要精确地描述代码,没有用的注释比没有注释更糟糕. /* */块注释对于被注 ...

  2. 【mysql--sql语句小问题总结】

    1:查询过滤条件不为空: <select id="getActivityByIdAndEx" resultMap="BaseResultMap" > ...

  3. 【C#】清除webBrowser 缓存和Cookie的解决方案

    试了很多方法,最后发现万剑大哥的方法管用,转载一下 转自:https://www.cnblogs.com/midcn/p/3527123.html 通过测试webBrowser与IE缓存和Cookie ...

  4. Note: PANOPLY: Low-TCB Linux Applications with SGX Enclaves

    PANOPLY provides middleware for SGX and Linux operating systems. What PANOPLY provides middleware fo ...

  5. CentOS6.5 Cloud-Init使用

    使用cloud-init实现虚拟机信息管理 http://blog.marvelworld.tk/?p=575 谈谈Openstack的CentOS镜像 http://www.chenshake.co ...

  6. 《OD Docker实战》Docker从入门到精通

    一. 安装Docker http://wiki.jikexueyuan.com/project/docker-technology-and-combat/ https://mos.meituan.co ...

  7. uoj #185. 【ZJOI2016】小星星

    #185. [ZJOI2016]小星星 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有 nn 颗小星星,用 mm 条彩色的细线串了起来,每条细线连着两颗小星星.有一天她发现,她的饰品被破坏 ...

  8. 2017-10-17 NOIP模拟赛2

    a [问题描述]你是能看到第一题的 friends 呢.——hja何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为字符串定义了新的权值计算方法.一个字符串由小写字母组成,字符串的 ...

  9. ffmpeg转码多路输出(二)

    ffmpeg转码多路输出(二)本程序支持一路输入多路输出,可根据map配置自行添加,第1路为纯拷贝,其他2路经过编解码,格式转换缩放和重采样,纯拷贝方面不同格式适应方面还没做全,以后补充.本程序适合多 ...

  10. 数据库的 2个参数 NLS_LENGTH_SEMANTICS 说明,comment 说明

    ############### sample 1: NLS_LENGTH_SEMANTICS 1.数据库字符集选择的是NLS_CHARACTERSET=UTF8,如果NLS_CHARACTERSET= ...