/* 根据分析写的代码wrrong了,先放在这里,如果哪位大牛会的话,麻烦帮忙修改下 把m天时间当成背包,每门课分成一类,每一类里有m个物品 分别是上该门课j天得到的收获,同一类物品只能选一个 这道题目太傻比了,输入的是n * m 的, 而我输入是n * n 可恶的sample居然是过的,悲剧 */ #include <iostream> #include <algorithm> using namespace std; int main() { int n , m; int val[105][105]; int dp[105][105]; int temp[105]; while(cin >> n >> m) { if(n == 0 && m == 0) break; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++)//这里太悲剧 cin >> val[i][j]; memset(dp, 0, sizeof(dp)); memset(temp, 0, sizeof(temp)); for(int i = 1; i <= n; i++) for(int j = m; j >= 1; j--) for(int k = 1; k <= j; k++) //if(j >= k) temp[j] = max(temp[j], temp[j - k] + val[i][k]); cout << temp[m] << endl; /* 但是还是不知道这个哪里错了 for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) for(int k = 1; k <= j; k++) dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - k] + val[i][k]); cout<< dp[n][m] << endl; */ } }