B - ACboy needs your help(动态规划,分组背包)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Input
Next follow a matrix A[i][j], (1<=i<=N<=100,1<=j<=M<=100).A[i][j] indicates if ACboy spend j days on ith course he will get profit of value A[i][j].
N = 0 and M = 0 ends the input.
Output
Sample Input
1 2
1 3
2 2
2 1
2 1
2 3
3 2 1
3 2 1
0 0
Sample Output
ACboy有n门课可以参加,他有m天时间。一天只能参加一门课。一门课可以参加多天,参加的天数不同获得的经验不一样,并且一门课只能修习一次。但是要注意的是,同一门课不是参加的天数越多,经验就越高。输入的表示是,行数表示第几门课,列数表示上几天,该数就是第几门课参加几天获得的经验数。问m天能获得最多的经验数。
思路:分组背包,建立dp数组dp[i][j]表示修习前i种课程,修习了j天,所得的最大的经验值。
二维数组:
方法:状态转移方程为dp[i][j]=max{dp[i-1][j],dp[i-1][j-k]+xing[i][k]},意思是前i-1种课程,前j-k天获得的经验最大数是dp[i-1][j-k],后k天参加第i门课获得的经验是xing[i][k]。比较此时的dp[i][j]和dp[i-1][j-k]+xing[i][k]谁大。
AC代码:
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring> using namespace std; int dp[][]={};
int xing[][]={}; int main()
{
// freopen("1.txt","r",stdin);
int n,m;
while(cin>>n>>m&&n!=&&m!=){
memset(dp,,sizeof(dp));
int i,j,k;
for(i=;i<=n;i++){//输入数据
for(j=;j<=m;j++)
cin>>xing[i][j];
}
for(i=;i<=n;i++){
for(j=;j<=m;j++)
for(k=;k<=j;k++){
if(dp[i][j]<=dp[i-][j-k]+xing[i][k])//进行比较
dp[i][j]=dp[i-][j-k]+xing[i][k];//状态转移
}
}
cout<<dp[n][m]<<endl;
}
return ;
}
一位数组:
方法:状态转移方程为dp[j]=max{dp[[j],dp[j-k]+xing[i][k]},意思是前j-k天获得的经验最大数是dp[j-k],后k天参加第i门课获得的经验是xing[i][k]。比较此时的dp[j]和dp[j-k]+xing[i][k]谁大。
AC代码:
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring> using namespace std; int dp[]={};
int xing[][]={}; int main()
{
// freopen("1.txt","r",stdin);
int n,m;
while(cin>>n>>m&&n!=&&m!=){
memset(dp,,sizeof(dp));
int i,j,k;
for(i=;i<=n;i++){
for(j=;j<=m;j++)
cin>>xing[i][j];
}
for(i=;i<=n;i++){
for(j=m;j>=;j--)
for(k=;k<=j;k++){
if(dp[j]<=dp[j-k]+xing[i][k])
dp[j]=dp[j-k]+xing[i][k];
}
}
cout<<dp[m]<<endl;
}
return ;
}
B - ACboy needs your help(动态规划,分组背包)的更多相关文章
- Codeforces 946 D.Timetable-数据处理+动态规划(分组背包) 处理炸裂
花了两个晚上来搞这道题. 第一个晚上想思路和写代码,第二个晚上调试. 然而还是菜,一直调不对,我的队友是Debug小能手呀(真的是无敌,哈哈,两个人一会就改好了) D. Timetable tim ...
- P1757 通天之分组背包 / hdu1712 ACboy needs your help (分组背包入门)
P1757 通天之分组背包 hdu1712 ACboy needs your help hdu1712题意:A[i][j]表示用j天学习第i个课程能够得到A[i][j]的收益,求m天内获得的收益最大值 ...
- HDU 1712 ACboy needs your help(分组背包)
题意:给你n的课程组,每个课程组有m个课程,每个课程有一个完成时间与价值.问在m天内每组课程组最多选择一个,这样可以得到的最大价值是多少 题解:分组背包,其实就是每个课程组进行01背包,再在课程组内部 ...
- 【HDU1712】ACboy needs your help(分组背包)
将背包九讲往后看了看,学习了一下分组背包.来做几道入门题,试试手. #include <iostream> #include <cstring> #include <cs ...
- BZOJ1296 [SCOI2009]粉刷匠 动态规划 分组背包
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1296 题意概括 有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝 ...
- HDU - 1712 - ACboy needs your help 【分组背包】
<题目链接> 题目大意:有n个课程,现在花M天来学习这些课程,学习每个课程花的天数所得到的价值不同,求M天怎么分配学习才能得到的价值最大.(这些课程得到的价值和所花天数的关系由矩阵给出) ...
- HDU1712:ACboy needs your help(分组背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1712 解释看这里:http://www.cnblogs.com/zhangmingcheng/p/3940 ...
- HDU1712 ACboy needs your help(分组背包)
每种课程学习不同天数可以获得不同价值,这可以看成一个组,那么题目就是分组背包的模板题了. 1 #include<cstdio> 2 #include<cstring> 3 #i ...
- HDU 1712 ACboy needs your help(分组背包入门题)
http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意: 有个人学习n门课程,a[i][j]表示用j分钟学习第i门课程所能获得的价值,背包容量为一共有m时间 ...
- ACboy needs your help(分组背包)
ACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he ...
随机推荐
- PHP文件上传预览
主页 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- 拒绝深坑!记录找了多半天时间的C++编译失败的错误
采用新的源码,和原来的服务改动也不是很大,但是拒绝深坑啊,找了半天以为是源码的问题,结果倒好原来是环境的问题,还是要感谢一个神一样的人物的帮助 编译的时候一直出现undefined reference ...
- Actor模型[转]
原文链接:http://blog.jeoygin.org/archives/477 Actor这个模型由Carl Hewitt在1973年提出,Gul Agha在1986年发表技术报告“Actors: ...
- JSON文件处理
牛X的JSON解析JSON字符串显示字典键值 public void ResolveJson() { //定义的JSON字符串,注意JSON的格式 string str = @” { “”Name”” ...
- cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用
convertToNodeSpace:把世界坐标转换到当前节点的本地坐标系中. //可以应用于判断子节点是否被点击,这时就需要把坐标从世界坐标系转换为父节点的坐标系. //当然大多数情况会用CCMen ...
- ubuntu开放防火墙端口
root@jbxue:$ sudo ufw enable Firewall started and enabled on system startup root@jbxue:$ sudo ufw ...
- 浏览器标题栏添加小logo图片,记录一下,方便以后用
效果如图:这是富连网的logo的实现,只需一行代码,我就写给自己和那些不知道的人吧 <link rel="icon" type="image/x-icon" ...
- HDU 5908 Abelian Period (BestCoder Round #88 模拟+暴力)
HDU 5908 Abelian Period (BestCoder Round #88 模拟+暴力) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=59 ...
- .net通过WCF调用java发布的服务,获取数据
功能描述 java作为后台,连接数据库获取数据,然后发布SOAP services,让.net平台通过WCF进行引用. 实现步骤 1.在项目特定文件夹下,右键->添加服务引用,输入服务的url地 ...
- Calendar时间类型数据设置
Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -1); calendar.set(Calendar.H ...