HDU 1712 ACboy needs your help (分组DP)

题目

http://acm.hdu.edu.cn/showproblem.php?pid=1712

题意

有n门课,有m天,每门课可以学习1-m天,不同长度的时间收益不一样,同一门课不能多次学习,同一天只能学一门课,求最大收益

解法

分组DP,有n组物品,背包容量为m,每组物品可以选一个或者一个也不选

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 101;
int dp[N];
int a[N][N];
int main() {
    int n, m;
    while(scanf("%d%d", &n, &m) && (n + m)) {
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++) {
                scanf("%d", &a[i][j]);
            }
        }
        memset(dp, 0, sizeof(dp));
        for(int i = 1; i <= n; i++) { /*n组*/
            for(int j = m; j >= 1; j--) { /*容量*/
                for(int k = 1; k <= j; k++) { /*组内选择*/
                    dp[j] = max(dp[j], dp[j - k] + a[i][k]);
                }
            }
        }
        printf("%d\n", dp[m]);
    }
    return 0;
}

Source

HDU 2007-Spring Programming Contest

posted @ 2015-08-06 23:11  ACM_Record  阅读(132)  评论(0编辑  收藏  举报