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