• hdu 1712 分组背包入门


    对于每门课程,学习的时间不同,收获也不同,在一门课程上花费了两个不同的时间去学习是互斥的,即它们是属于同一个组内的物品,直接做分组背包即可。

    需要注意三重循环的顺序不可变!

     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
    ", dp[m]);
    36     }
    37     return 0;
    38 }

    注:没有要求必须用够m天,即背包可以不满。

  • 相关阅读:
    P2610 [ZJOI2012]旅游
    P2323 [HNOI2006]公路修建问题
    P3629 [APIO2010]巡逻
    ARC059F
    AGC004D Teleporter
    p3203 弹飞绵羊
    bzoj5450 轰炸
    bzoj4313 三维积木
    cf123E Maze
    bzoj4423 [AMPPZ2013]Bytehattan
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4648676.html
Copyright © 2020-2023  润新知