`

hdu 1712 ACboy needs your help(我的第一个分组背包:每组至多一个)

阅读更多

ACboy needs your help

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 761    Accepted Submission(s): 374

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 profit?

 

Input
The input consists of multiple data sets. A data set starts with a line containing two positive integers N and M, N is the number of courses, M is the days ACboy has.
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
For each data set, your program should output a line which contains the number of the max profit ACboy will gain.

 

Sample Input
2 2 1 2 1 3 2 2 2 1 2 1 2 3 3 2 1 3 2 1 0 0

 

Sample Output
3 4 6

          此题属于典型的分组背包,(每组至多一个背包)!!!
       看了背包9讲,直接用他上面所写的套上去就行了,三重循环记住每一重的意义。
代码:
#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;

int a[105][105];
int bag[105];
int N, V;

void _gro_bag()     //分组背包
{
    int i, j, k;
    memset(bag, 0, sizeof(bag));
    for(i = 1; i <= N; i++) //第一重循环是:分组数
    {
        for(j = V; j >= 0; j--) //第二重循环是:容量体积
        {
            for(k = 1; k <= V; k++) //第三重循环是:属于i组的k
            {
                if(j >= k)
                    bag[j] = max(bag[j], bag[j-k] + a[i][k]);
            }
        }
    }
}

int main()
{
    int i, j;
    while(scanf("%d%d", &N, &V), N+V)
    {
        for(i = 1; i <= N; i++)
            for(j = 1; j <= V; j++)
                scanf("%d", &a[i][j]);
        _gro_bag();
        printf("%d\n", bag[V]);
    }

    return 0;
}
 
0
9
分享到:
评论

相关推荐

    HDU2013暑期多校联合训练第一场0723-解题报告和标程

    2. "2013暑期多校联合训练第一场0723-标程":这个文件可能是一个包含所有题目标准代码的集合,可能每道题都有一个对应的代码文件,参赛者可以通过阅读和分析这些代码来理解如何用不同的编程语言实现解决方案。...

    hdu1250高精度加法

    具体地,题目涉及到了斐波那契数列的一个变种:F(1)=1, F(2)=1, F(3)=1, F(4)=1, F(n&gt;4)=F(n-1)+F(n-2)+F(n-3)+F(n-4),其中n &gt; 4。这里的关键是要能够计算出F(n)的值,而由于这个序列的增长速度非常快,传统的整数...

    hdu.rar_hdu

    HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...

    HDU题目java实现

    HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案。这里的“java实现”意味着作者使用Java作为编程工具来解答这些算法题。 在Java编程方面,以下是一些可能涵盖的知识点: 1. ...

    背包问题模板 hdu2191

    背包问题是计算机科学中一种经典的NP完全问题,它是指给定一个容量为V的背包和N种物品,每种物品具有价值和重量,如何选择物品放入背包,使得总价值最大化且总重量不超过背包容量。背包问题有多种变形,包括0/1背包...

    HDU DP动态规划

    例如,一个简单的动态规划问题可以是“斐波那契数列”,其中状态通常定义为第n个斐波那契数,状态转移方程为F(n) = F(n-1) + F(n-2),初始条件为F(0) = 0,F(1) = 1。 在HDU的DP题目中,可能会有各种复杂度的题目,...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    ACM HDU

    【标签】"ACM题解 HDU"意味着这是一个关于如何解答HDU ACM题目的资源,可能包含了解题思路、算法解析、代码实现等方面的内容。这样的资料对于准备ACM比赛的选手或者希望提升算法能力的程序员来说非常有价值。 在...

    hdu动态规划算法集锦

    动态规划的关键在于确定状态转移方程,即如何从前一个或前几个状态转移到当前状态。 ### 知识点详解 #### Robberies (抢劫) 题目链接:[Robberies](http://acm.hdu.edu.cn/showproblem.php?pid=2955) - **问题...

    hdu1290解题报告

    题目要求计算当在一个球体(本题中的蛋糕)上切割 _n_ 刀时(每一刀都是一个平面),最多可以将球体分割成多少个部分。这里的每一刀都假设是理想情况下的切割,即每一切割都是一个完美的平面,并且这些平面不会相互...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    杭电ACMhdu1163

    【标签】:“杭电”代表题目来源于杭州电子科技大学,是ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest, ICPC)比赛的一个平台,提供了许多供学生练习和参赛的题目。"ACM"是此类竞赛的...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。...ACM HDU 题目分类是一个非常重要的参考资源,对于编程选手来说,掌握这些分类可以帮助他们更好地理解和解决问题。

    HDU_软工_计组实验1~8

    总的来说,"HDU_软工_计组实验1~8"是一个全面的实践教学资源,涵盖了计算机组织的关键知识点,通过实际操作帮助学生深化理解并提升技能。对于想要深入理解计算机硬件运作和系统级别的软件开发的学生来说,这是一个...

    ACM hdu 代码大全3000例,部分代码有详细解析

    每一个代码实例都是一个珍贵的学习素材,它们不仅是解决问题的答案,更是思路和方法的体现。部分代码还附带了详细解析,对关键步骤进行解释,有助于读者深入理解算法背后的逻辑。 1. 数据结构篇: - 链表:用于...

    hdu acm 教案(3)

    4. **状态转移方程**:这是动态规划的核心,它描述了从一个状态到另一个状态的转换过程,通常用一个递推公式表示。例如,斐波那契数列的状态转移方程为F(n) = F(n-1) + F(n-2)。 5. **记忆化搜索**:这是动态规划的...

    Hdu1000—2169部分代码

    HDU是杭州电子科技大学(Hangzhou Dianzi University)举办的一个在线编程竞赛平台,全称为HDU Online Judge。ACM是国际大学生程序设计竞赛(International Collegiate Programming Contest)的缩写,是一个全球性的...

    hdu 1257 最低拦截系统 lis

    题目名为“hdu 1257 最低拦截系统”,这里的“最低拦截系统”实际上是描述了一个问题场景,而具体的问题通过描述部分可以得知是要求找出给定数组中的最长递增子序列的长度。这里所谓的“最低拦截系统”可能是为了...

    HDU ACM 2005第几天 txt格式

    此题目要求输入一个特定日期(格式为“年/月/日”),然后计算并输出这一天是一年中的第几天。例如,输入“2023/1/1”,则应该输出“1”。 ### 解题思路 1. **判断平年与闰年**:首先需要判断输入的年份是否为闰年...

    hdu 入门代码(2000-2099)

    在这个压缩包中,"HDU 2000-2099 解题报告.CHM"是一个CHM(Compiled Help Manual)格式的文件,它是一种常见的帮助文档格式,通常包含索引、目录和详细内容。用户可以通过这个文件快速查阅每个题目的解题策略和代码...

Global site tag (gtag.js) - Google Analytics