hdu 1712 分组背包问题

可能是自己的英语不好,一开始不能理解题目的意思,所以还是先讲一下题目的意思,现在acboy有m天的时间来修n门课程,然后给你一个矩阵,A[i][j]表示话J天的时间学习i门课程能够得到A[i][j],那么我们的任务就是把acboy所拥有的天数m天分成一些部分来学习这其中的课程,使得能够在学校课程当中收获最多。

看过背包九讲的话,做这个就容易多了,其实就是简单的分组背包问题。

View Code
 1  #include<iostream>
 2  #include<stdio.h>
 3  using namespace std;
 4  int dp[110],value[110][110];
 5  int main()
 6  {
 7     int n,m;
 8     while(scanf("%d%d",&m,&n)!=EOF&&m&&n)
 9     {
10            for(int i=0;i<m;i++)
11              for(int j=0;j<n;j++)
12              scanf("%d",&value[i][j]);
13            memset(dp,0,sizeof(dp));
14            for(int i=0;i<m;i++)
15               for(int j=n;j>=1;j--)
16                   for(int k=1;k<=j;k++)
17                   {
18                       dp[j]=dp[j]>dp[j-k]+value[i][k-1]?dp[j]:dp[j-k]+value[i][k-1];
19                  //     cout<<"现在在"<<i+1<<"组"<<endl;
20                 //      cout<<"更新"<<j<<"  "<<dp[j]<<endl;
21                  //     system("pause");
22                   }
23            printf("%d\n",dp[n]);       
24     }
25     return 0;    
26  }
27  

 

posted @ 2012-09-01 21:39  诺小J  阅读(149)  评论(0编辑  收藏  举报