分组背包模板题 hdu1712
题目链接: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的更多相关文章
- D. Arpa's weak amphitheater and Mehrdad's valuable Hoses 分组背包模板题
		http://codeforces.com/problemset/problem/742/D 并查集预处理出所有关系. 一开始的时候,我预处理所有关系后,然后选择全部的时候,另起了一个for,然后再判 ... 
- HDU 1712 ACboy needs your help (分组背包模版题)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 有n门课,和m天时间.每门课上不同的天数有不同的价值,但是上过这门课后不能再上了,求m天里的最大 ... 
- HDU 2602 - Bone Collector - [01背包模板题]
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Many years ago , in Teddy’s hometown there was a ... 
- HDU 1114 Piggy-Bank(完全背包模板题)
		完全背包模板题 #include<cstdio> #include<cstring> #include<algorithm> using namespace std ... 
- HDU 2191 珍惜现在,感恩生活(多重背包模板题)
		多重背包模板题 #include<iostream> #include<cstring> #include<algorithm> using namespace s ... 
- HDU - 1712   (分组背包模板)
		题目:http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意:给你n个课程,每个课程有很多种学习方法,用的时间和取得的效果都不一样,现在你只有m天时间用来学 ... 
- 51nod 1086背包问题V2 (完全背包模板题)
		1086 背包问题 V2 1 秒 131,072 KB 20 分 3 级题 题目描述 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1, ... 
- HDU1712:ACboy needs your help(分组背包模板)
		http://acm.hdu.edu.cn/showproblem.php?pid=1712 Problem Description ACboy has N courses this term, an ... 
- POJ 3624 Charm Bracelet(01背包模板题)
		题目链接 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 52318 Accepted: 21912 Descriptio ... 
随机推荐
- 转载:老生常谈C++中实参形参的传递问题
			以下文章转载自:http://www.jb51.net/article/108390.htm 函数中参数的传递 这里说的传递当然是指 实参是如何传递给形参的啦 还挺复杂的~~~~~~~~⊙﹏⊙b汗,这 ... 
- C#USB设备枚举Kernel32的PInvoke
			using System; using System.Runtime.InteropServices; using System.Security; namespace Splash { #regio ... 
- electron 项目的搭建方式,借助 node 和 npm
			1,首先确定安装了 node 和 npm 2,创建一个文件夹,如 aa 3,CMD 命令进入到 aa,用 npm 命令初始化一个项目 4, npm -init 根据提示完成配置 5,安装 electr ... 
- jqGrid 获取多级标题表头
			1.jgGrid没有提供此方法获取如下标题 2.实现代码 getHeaders:function(){ var headers=[],temptrs=[]; //select the group he ... 
- WebService与RESTful WebService
			Manual Instruction Document Web Service JAX-WS & JAX-RS Author: Liu Xiang Date: 2018/01/12 1. Su ... 
- Java快速开发平台强大的代码生成器,JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布
			JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布 此版本为Vue+ElementUI SPA单页面应用版本,提供新一代风格代码生成器模板,采用Vue技术,提供两套精美模板E ... 
- ueditor修改工具栏固定位置和显示空白div
			ueditor.all.js 
- 回溯法  leetcode题解  Combination Sum  递归法
			题目大意:给出一个数组,用这些数组里的元素去凑一个target.元素可以重复取用. 感觉对这种题目还是生疏的.脑子里有想法,但是不知道怎么表达出来. 先记录下自己的递归法.应该还可以用循环实现. 回溯 ... 
- 尚硅谷springboot学习13-配置的加载
			配置可以有很多不同的来源,也有不同的加载顺序,下面来具体的看一下 配置文件加载位置 spring boot 启动会扫描以下位置的application.properties或者application. ... 
- python中time模块和datetime模块
			time模块和datetime模块 时间分为三种模式(time 模块) 时间戳 (time.time()) 格式化字符串 (time.strftime(%Y-%m-%d %H:%M:%S %p)) ... 
