hdu 1712 ACboy needs your help(分组背包入门)

 1 /**********************************************************
 2 题目:   ACboy needs your help
 3 链接:   http://acm.hdu.edu.cn/showproblem.php?pid=1712
 4 题意:   一开始输入n和m,n代表有n门课,m代表你有m天,然
 5          后给你一个数组,val[i][j],代表第i门课,在通过j
 6          天去修,会得到的分数。求在m天能得到的最大分数。
 7 算法:   分组背包
 8
 9 ***********************************************************/
10
11 #include<iostream>
12 #include<cstring>
13 using namespace std;
14
15 const int mx=105;
16 int dp[mx][mx],a[mx][mx];
17
18 int main()
19 {
20     int n,m,i,j,k;
21     while (cin>>n>>m)
22     {
23         if (n==0&&m==0) return 0;
24
25         ///输入及初始化
26         for (i=1;i<=n;i++)
27         {
28             for (j=1;j<=m;j++) cin>>a[i][j];
29         }
30         memset(dp,0,sizeof(dp));
31
32        ///分组背包模板。
33         for (i=1;i<=n;i++)
34         {
35            for (j=1;j<=m;j++)
36            {
37                for (k=0;k<=j;k++)    ///k一定要从0开始。
38                dp[i][j]=max(dp[i][j],dp[i-1][j-k]+a[i][k]);
39            }
40         }
41         cout<<dp[n][m]<<endl;
42     }
43 }
时间: 2024-08-07 17:01:52

hdu 1712 ACboy needs your help(分组背包入门)的相关文章

HDU 1712 ACboy needs your help-dp-(分组背包模型)

题意:n门课程用m天来学习,每门课用不同的天数来学习会有不同的学分,求能得到的最大的学分 分析:第一次接触分组背包.分组背包的模型就是不同的物品有不同的花费和价值,求在规定花费内能得到的最大的价值,这前面跟以前的背包最大的不同是物品分为几组,每组内的物品最多只能选一种:dp[i][j]表示前i组花费j能得到的最大的价值,不过实际在做的时候用一维数组就可以了 公式: for 组i for 花费j (从大到小) for 组内物品k if(j>=c[k]) dp[j]=max(dp[j],dp[j-c

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

http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意: 小杰有m天的时间去上n门不同的课. 对于第i门课来说, 如果小杰花j天的时间在该课上, 那么小杰可以获得val[i][j]的价值. 现在给出矩阵val[n][m], 要你求出小杰能获得的最大价值和? 分析: 咋一看, n门课, m天的时间, 要我们求最大价值. 那么明显是从n门课中选出合适的几门, 是的总花费的时间<=m的前提下, 价值最大化. 但是发现每门课有m种不同的价值获取方式. 所以我们

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的前提下, 价值最大化. 可是发现每门课有

hdu 1712 ACboy needs your help

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 Problem Description ACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he will gain from different course depen

HDU 1712 ACboy needs your help(DP)

Problem Description ACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he will gain from different course depending on the days he spend on it.How to arrange the M days for the N courses to maximize the

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

题意:给你n的课程组,每个课程组有m个课程,每个课程有一个完成时间与价值.问在m天内每组课程组最多选择一个,这样可以得到的最大价值是多少 题解:分组背包,其实就是每个课程组进行01背包,再在课程组内部进行枚举课程,但是这儿必须将枚举课程放在最里层才能保证最多选择一个 #include<set> #include<map> #include<queue> #include<stack> #include<cmath> #include<vec

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

<题目链接> 题目大意:有n个课程,现在花M天来学习这些课程,学习每个课程花的天数所得到的价值不同,求M天怎么分配学习才能得到的价值最大.(这些课程得到的价值和所花天数的关系由矩阵给出) 解题分析:这是一个很明显的分组背包问题,将某一门课程花m个不同天数能够得到不同的价值看成是m个有各自花费和价值的物品,然后,又因为根据题意,每一门课程都只能选择一种花费的天数,于是,这道题就被很自然的转化为分组背包问题. #include <iostream> #include <algor

HDU 1712 ACboy needs your help AC男需要你的帮助 (AC代码)分组的背包问题

分组的背包问题:有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].这些物品被划分为若干组,每组中的物品互相冲突,最多选一件.求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. HDU 1712:AC男有m天时间可以上课,有n种课程可以选,但是每一种课程有各种的上课时长可选(因为并不是花的时间与收获就呈线性增长的,两者之间没什么对应关系,也许花1天收获2点经验,但是花2天就不是4点经验了,可能是3点而已).耗时与收获以矩阵的方式给出.(把同一课程

hdu 1712 分组背包入门

对于每门课程,学习的时间不同,收获也不同,在一门课程上花费了两个不同的时间去学习是互斥的,即它们是属于同一个组内的物品,直接做分组背包即可. 需要注意三重循环的顺序不可变! 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 const int INF = -99999999; 7 const int N = 101; 8 int a[N][N