地址: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; }