题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712

第一次接触分组背包,参考博客:https://blog.csdn.net/yu121380/article/details/81387879

什么都要自己写一遍。

对于k组物品,每个物品都有一个需要花费的容量值和一个价值,并且对于同一组里面的物品最多只可以拿一个,现在有m个单位的容量,问在不超出最大容量的情况下可以得到的最大的价值。

思路:我们声明一个二维数组,dp[k][j]表示前k组花费j容量时可以得到的最大价值。对于每一组的每一个物品都有两种选择(选与不选),即dp[k][j]=max(dp[k-1][j],dp[k-1][j-w[i]]+v[i]);如果dp[k][j]=dp[k-1][j]就是第k组的第i个物品不取,值直接从前一组的答案赋过来,如果dp[k][j]=dp[k-1][j-w[i]]+v[i],那么就是取第k组的第i个物品。

代码:

for(int k=;k<=K;k++){//枚举k组物品 

    for(int j=;j<=N;j++){//计算花费j容量时可以得到的最大价值,
//每个物品只能拿一次,因为是二维数组,所以是顺着写,如果是一维就要逆着写 for(int i=;i<=num[i];i++){//枚举第k组里面的每一个物品,因为每一组物品最多只可以拿一个
//所以这个循环要写在最里面
if(j>=w[i])
dp[k][j]=max(dp[k-][j],dp[k-][j-w[i]]+v[i]);
//在这第三层循环里面我只改变了dp[k][j]的值
//而这个改变的值是因为从第k组物品里面拿了一个(当然可能这一组都没拿,只是上一组的值拿过来了)
//上面这一步就是在选择到底该拿哪一个
}
}
}

hdu1712题意,第一行给出两个数字n和m,表示一共有n门学科和m天的时间,接下来给出一个n*m的矩阵,矩阵里面的元素v[i][j]表示第i门学科学习j天的收益,每天只可以学习一门学科,现在问在m天的时间里面学习这n门学科可以得到的最大收益是多少。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
#include<set>
#include<cstdio>
#include<string>
#include<deque>
using namespace std;
typedef long long LL;
#define eps 1e-8
#define INF 0x3f3f3f3f
#define maxn 10005
int dp[maxn],v[][];//用一维数组来写分组背包,v[i][j]表示第i组占容量为j的物品的价值
int n,m,k,t;
int main()
{
while(scanf("%d%d",&n,&m)&&n&&m)
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&v[i][j]);
}
}
for(int k=;k<=n;k++){//枚举k组物品
for(int i=m;i>=;i--){//枚举容量,因为是一维写,并且物品只能拿一次,所以要倒着遍历
for(int j=;j<=m;j++){//第k组物品里的m个物品里面选择一个,
if(i>=j)
dp[i]=max(dp[i],dp[i-j]+v[k][j]);
}
}
}
printf("%d\n",dp[m]);
}
return ;
}

分组背包模板题 hdu1712的更多相关文章

  1. D. Arpa's weak amphitheater and Mehrdad's valuable Hoses 分组背包模板题

    http://codeforces.com/problemset/problem/742/D 并查集预处理出所有关系. 一开始的时候,我预处理所有关系后,然后选择全部的时候,另起了一个for,然后再判 ...

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

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

  3. HDU 2602 - Bone Collector - [01背包模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Many years ago , in Teddy’s hometown there was a ...

  4. HDU 1114 Piggy-Bank(完全背包模板题)

    完全背包模板题 #include<cstdio> #include<cstring> #include<algorithm> using namespace std ...

  5. HDU 2191 珍惜现在,感恩生活(多重背包模板题)

    多重背包模板题 #include<iostream> #include<cstring> #include<algorithm> using namespace s ...

  6. HDU - 1712 (分组背包模板)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意:给你n个课程,每个课程有很多种学习方法,用的时间和取得的效果都不一样,现在你只有m天时间用来学 ...

  7. 51nod 1086背包问题V2 (完全背包模板题)

    1086 背包问题 V2 1 秒 131,072 KB 20 分 3 级题 题目描述 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1, ...

  8. HDU1712:ACboy needs your help(分组背包模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1712 Problem Description ACboy has N courses this term, an ...

  9. POJ 3624 Charm Bracelet(01背包模板题)

    题目链接 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 52318   Accepted: 21912 Descriptio ...

随机推荐

  1. Redis String数据类型

    get() del() set() setnx():如果key 不存在就进行设置,存在返回0 setex():设置value存在时间  setex color 10 red    在10s中,colo ...

  2. ubuntu-14.04中/boot分区不足的解决办法

    环境:ubuntu-kylin 或者 ubuntu-14.04,/boot单独分区工具:ubuntu的liveCD. 问题: 由于当初安装的时候,看网上说/boot很小,100M足以,于是单独分区,分 ...

  3. 回溯法 leetcode题解 Combination Sum 递归法

    题目大意:给出一个数组,用这些数组里的元素去凑一个target.元素可以重复取用. 感觉对这种题目还是生疏的.脑子里有想法,但是不知道怎么表达出来. 先记录下自己的递归法.应该还可以用循环实现. 回溯 ...

  4. js 获取北京时间

    <SCRIPT LANGUAGE = "JavaScript"> var xmlhttp = new ActiveXObject("MSXML2.XMLHTT ...

  5. 命令行下将磁盘从GPT转换为MBR

    1.在系统提示无法安装的那一步,按住“shift+f10”,呼出“cmd”命令符 2.输入:diskpart,回车 进入diskpart 3.输入:list disk,回车 显示磁盘信息 4.输入:s ...

  6. PHP使用redis防止大并发下二次写入(如如何防止重复下订单)

    php调用redis进去读写操作,大并发下会出现:读取key1,没有内容则写入内容,但是大并发下会出现同时多个php进程写入的情况,这个时候需要加一个锁,即获取锁的php进程有权限写. $lock_k ...

  7. ReactiveX 学习笔记(7)聚合操作符

    Mathematical and Aggregate Operators 本文的主题为处理 Observable 的聚合操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操 ...

  8. JAVA 泛型的参数的传递示意图

    泛型的两种参数传递方式

  9. 【转】Classful IPv4 addressing definition

    Classful addressing definition Class Leadingbits Size of networknumber bit field Size of restbit fie ...

  10. C++ AfxBeginThread的介绍/基本用法

    AfxBeginThread    用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一 ...