您的位置:首页 > 其它

hdu 1712 分组背包问题

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

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

View Code

 #include<iostream>
 #include<stdio.h>
 using namespace std;
 int dp[110],value[110][110];
 int main()
 {
    int n,m;
    while(scanf("%d%d",&m,&n)!=EOF&&m&&n)
    {
           for(int i=0;i<m;i++)
             for(int j=0;j<n;j++)
             scanf("%d",&value[i][j]);
           memset(dp,0,sizeof(dp));
           for(int i=0;i<m;i++)
              for(int j=n;j>=1;j--)
                  for(int k=1;k<=j;k++)
                  {
                      dp[j]=dp[j]>dp[j-k]+value[i][k-1]?dp[j]:dp[j-k]+value[i][k-1];
                 //     cout<<"现在在"<<i+1<<"组"<<endl;
                //      cout<<"更新"<<j<<"  "<<dp[j]<<endl;
                 //     system("pause");
                  }
           printf("%d\n",dp
);
    }
    return 0;
 }
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: