ACboy needs your help(背包九讲_分组背包)

ACboy needs your helpCrawling in process...
Crawling failed
Time Limit:1000MS    
Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit
Status

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 

题意:有n个课程,现在花M天来学习这些课程,学习每个课程花的天数所得到的价值不同,求M天怎么分配学习才能得到的价值最大。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int main()
{
    int n,m,i,j,k;
    int f[110][110];
    int dp[110];
    while(~scanf("%d %d",&n,&m))
    {
        if(n==0&&m==0)
            break;
        memset(dp,0,sizeof(dp));
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                scanf("%d",&f[i][j]);
        for(i=1;i<=n;i++)//分组数
            for(j=m;j>=1;j--)//容量体积
                for(k=1;k<=j;k++)//属于i组的k
                    dp[j]=max(dp[j],dp[j-k]+f[i][k]);
        printf("%d\n",dp[m]);
    }
    return 0;
}



时间: 2024-11-06 17:56:13

ACboy needs your help(背包九讲_分组背包)的相关文章

悼念512汶川大地震遇难同胞――珍惜现在,感恩生活(背包九讲_多重背包)

悼念512汶川大地震遇难同胞――珍惜现在,感恩生活Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价

Big Event in HDU(背包九讲_多重背包转01背包)

Big Event in HDUCrawling in process... Crawling failed Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you

背包九讲之多重背包

背包九讲原文: 题目 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本算法 这题目和完全背包问题很类似.基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i]件.令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值,则有状态转移方程: f[i][v]=max{f[i-1][v-k*c[i]]

背包九讲之01背包(ZeroOnePack)

最近看背包九讲,对于我们这种小白来说需要仔细研读,由于里面有些思维跳跃,故在原文基础上加上自己的理解. 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放. 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是: f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[

【动态规划】背包九讲及相应习题

[参考博客及视频] 1.大雪菜 2.背包九讲——全篇详细理解与代码实现 3.dd大牛的<背包九讲> 4.背包问题 (附单调队列优化多重背包 [题目] 1.Acwing 背包题目 2.01背包问题 Luogu 2925 干草出售Luogu 1616 疯狂的采药HDU 3466 Proud Merchants 3.完全背包问题 HDU 1114 Piggy-BankLuogu 1853 投资的最大效益 4.多重背包问题 HDU 1059 DividingLuogu P1776 宝物筛选 5.混合背

完全背包(背包九讲)

题目: 有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 思路: 这个问题非常类似于01背包问题,所 不同的是每种物品有无限件.也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件.取1件.取2件--等很多种.如果仍然按照解 01背包时的思路,令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值.仍然可以按照每种物品不同的策略写出状态转

01背包问题的学习(来源:背包九讲)

问题: 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 思路: 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放.用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}.这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的.所以有必要将它详细解释一下:"

有依赖的背包问题(背包九讲)

问题: 这种背包问题的物品间存在某种"依赖"的关系.也就是说,i依赖于j,表示若选物品i,则必须选物品j.为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品所依赖:另外,没有某件物品同时依赖多件物品. 算法: 这个问题由NOIP2006金明的预算方案一题扩展而来.遵从该题的提法,将不依赖于别的物品的物品称为"主件",依赖于某主件的物品称为"附件".由这个问题的简化条件可知所有的物品由若干主件和依赖于每个主件的一个附件集合组成.按照背

二维费用背包问题(背包九讲)

------------------------------------------ 前言: 对于一些背包问题,重点还是在于如何找出"背包容量"和"各种代价",以及价值,如此问题便迎刃而解了.下午 打篮球居然下冰雹了,悲催了.... ------------------------------------------ 问题: 二维费用的背包问题是指:对于每件物品,具有两种不同的费用:选择这件物品必须同时付出这两种代价:对于每种代价都有 一个可付出的最大值(背包容量)