hdu 1712
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1712
题意:复习课程,n们课,有m天复习,a[i][j]代表用j天来复习第i门课的收获。。(这里居然可能用的天数多而收获更少……囧)
mark:第一个分组背包。对于每个i最多只能选一个j,或者不选。
代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> const int N = 110; int w[N],dp[N]; int max(int a, int b) {return a > b ? a : b;} int main() { int n,m; while(scanf("%d%d", &n, &m), n+m) { memset(dp, 0, sizeof(dp)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) scanf("%d", w+j); for(int k = m; k >= 0; k--) { for(int j = 1; j <= k; j++) dp[k] = max(dp[k], dp[k-j]+w[j]); } } printf("%d\n", dp[m]); } return 0; }