很简单的一道分组背包入门问题。不多解释了。
1 #include2 #include 3 #include 4 5 using namespace std; 6 7 int N,M,A[108][108]; 8 int dp[108]; 9 10 inline int Max(int a,int b)11 {12 if(a>b) return a;13 return b;14 }15 16 int main()17 {18 while(scanf("%d%d",&N,&M),(N||M))19 {20 for(int i=1;i<=N;i++)21 for(int j=1;j<=M;j++)22 scanf("%d",&A[i][j]);23 memset(dp,0,sizeof(dp));24 25 for(int i=1;i<=N;i++)26 {27 for(int j=M;j>=0;j--)28 {29 for(int k=0;k<=j;k++)//dp[j-k]+30 dp[j]=Max(dp[j],dp[k]+A[i][j-k]);31 }32 }33 printf("%d\n",dp[M]);34 }35 return 0;36 }