标签:
对于每门课程,学习的时间不同,收获也不同,在一门课程上花费了两个不同的时间去学习是互斥的,即它们是属于同一个组内的物品,直接做分组背包即可。
需要注意三重循环的顺序不可变!
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 const int INF = -99999999; 7 const int N = 101; 8 int a[N][N]; 9 int dp[N]; 10 int n, m; 11 12 int main () 13 { 14 while ( scanf("%d%d", &n, &m) != EOF ) 15 { 16 if ( n == 0 && m == 0 ) break; 17 for ( int i = 1; i <= n; i++ ) 18 { 19 for ( int j = 1; j <= m; j++ ) 20 { 21 scanf("%d", &a[i][j]); 22 } 23 } 24 memset( dp, 0, sizeof(dp) ); 25 for ( int i = 1; i <= n; i++ ) 26 { 27 for ( int j = m; j > 0; j-- ) 28 { 29 for ( int k = 1; k <= j; k++ ) 30 { 31 dp[j] = max( dp[j], dp[j - k] + a[i][k] ); 32 } 33 } 34 } 35 printf("%d\n", dp[m]); 36 } 37 return 0; 38 }
注:没有要求必须用够m天,即背包可以不满。
标签:
原文地址:http://www.cnblogs.com/huoxiayu/p/4648676.html