hdu 1712 分组背包问题

mac2022-06-30  19

可能是自己的英语不好,一开始不能理解题目的意思,所以还是先讲一下题目的意思,现在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  

 

转载于:https://www.cnblogs.com/nuoyan2010/archive/2012/09/01/2667092.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)