hdu 1712 ACboy needs your help 裸的泛化物品

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712

裸的泛化物品

泛化物品的意思就是物品的价值是变化的 取决于你给它多少花费

学习自背包九讲第八讲

dp[i][j]表示前i件物品共分配j花费的情况下能得到的最大值

三层循环

第一层是物品 第二层是枚举总花费 第三层是枚举最新的一层占总花费的数目

用滚动数组来实现

#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <stack>
#include <set>
#include <queue>
#include <vector>

using namespace std;

typedef long long ll;

const int maxn = 110;

int a[maxn][maxn];
int dp[2][maxn];

int main()
{
    //freopen("in.txt", "r", stdin);

    int n, m;
    while(scanf("%d%d", &n, &m) == 2 && n != 0)
    {
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= m; j++)
                scanf("%d", &a[i][j]);

        int cur = 0;

        for(int i = 1; i <= m; i++)
        {
            dp[cur][i] = a[1][i];
        }

        for(int i = 2; i <= n; i++)
        {
            memset(dp[cur^1], 0, sizeof(dp[cur^1]));

            for(int j = 1; j <= m; j++)
            {
                for(int k = 0; k <= j; k++)
                {
                    dp[cur^1][j] = max(dp[cur^1][j], dp[cur][k] + a[i][j-k]);
                }
            }

            cur = cur ^ 1;
        }

        int ans = 0;
        for(int i = 1; i <= m; i++)
        {
            ans = max(ans, dp[cur][i]);
        }

        printf("%d\n", ans);
    }

    return 0;
}
时间: 2024-10-05 05:07:28

hdu 1712 ACboy needs your help 裸的泛化物品的相关文章

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(分组背包入门题)

http://acm.hdu.edu.cn/showproblem.php?pid=1712 题意: 有个人学习n门课程,a[i][j]表示用j分钟学习第i门课程所能获得的价值,背包容量为一共有m时间,求最大价值. 思路: P06: 分组的背包问题 问题 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].这些物品被划分为若干组,每组中的物品互相冲突,最多选一件.求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 算法 这个问题变成了每组物品有若

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

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-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 (分组背包问题)

有n门课程,和m天时间,完成a[i][j]得到的价值为第i行j列的数字,求最大价值...... 看过背包九讲的话,做这个就容易多了,其实就是简单的分组背包问题. #include <iostream> #include <string.h> using namespace std; int A[105][105]; int dp[105]; int main() { int n, m; while(cin>>n>>m&&n+m) { int