ACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he will gain from different course depending on the days he spend on it.How to arrange the M days for the N courses to maximize the profit?
Input
The input consists of multiple data sets. A data set starts with a line containing two positive integers N and M, N is the number of courses, M is the days ACboy has.
Next follow a matrix A[i][j], (1<=i<=N<=100,1<=j<=M<=100).A[i][j] indicates if ACboy spend j days on ith course he will get profit of value A[i][j].
N = 0 and M = 0 ends the input.
Output
For each data set, your program should output a line which contains the number of the max profit ACboy will gain.
Sample Input
12 2 21 2 31 3 42 2 52 1 62 1 72 3 83 2 1 93 2 1 100 0
Sample Output
13 24 36题目大意:先输入n,m代表n个课程和有m天,在输入n*m的矩阵,分别代表经历j天在i课程上,得到的一个权值,求大的权值。 4 5#include <iostream> 6#include <cstring> 7using namespace std; 8int a[105][105],dp[105]; 9int n,m; 10int main() 11{ 12 while(cin>>n>>m,n||m) 13 { 14 memset(dp,0,sizeof dp); 15 for(int i=1;i<=n;i++) 16 for(int j=1;j<=m;j++) 17 cin>>a[i][j]; 18 for(int i=1;i<=n;i++) 19 for(int j=m;j>=1;j--) 20 for(int k=1;k<=j;k++)///枚举在i课程的天数 21 dp[j]=max(dp[j],dp[j-k]+a[i][k]); 22 cout<<dp[m]<<'\n'; 23 } 24 return 0; 25}