zoukankan      html  css  js  c++  java
  • HDOJ 3496 Watch The Movie(二维背包)

    题意:

    题目给定n部电影,每部电影有时长和量化的意义,要求看m部电影,并且市场控制在 l 以内,转化为背包问题,让我们在n件物品中找正好m件物品塞进容量为l的包中,求最大的价值。

    思路:

    1. dp[i][j][v] 表示前 i 部电影选择 j 部并且背包容量为 v 时,所能获得的最大价值。

    2. dp[i][j][v] = max(dp[i-1][j][v], dp[i-1][j-1][v-wk] + vk) 采用 01 背包的形式可以把 i 所在的维数占用空间省掉。

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int MAXN = 110;
    const int MAXD = 1010;
    const int INFS = 0x3fffffff;
    
    int dp[MAXN][MAXD];
    
    int main()
    {
        int cases;
        scanf("%d", &cases);
        while (cases--)
        {
            int n, m, vol;
            scanf("%d %d %d", &n, &m, &vol);
    
            memset(dp[0], 0, sizeof(dp[0]));
    
            for (int i = 1; i <= m; ++i)
                for (int v = 0; v <= vol; ++v)
                    dp[i][v] = -INFS;
    
            for (int i = 1; i <= n; ++i)
            {
                int w, val;
                scanf("%d %d", &w, &val);
    
                for (int j = min(i, m); j >= 1; --j)
                    for (int v = vol; v >= w; --v)
                        dp[j][v] = max(dp[j][v], dp[j-1][v-w] + val);
            }
    
            if (dp[m][vol] > 0)
                printf("%d\n", dp[m][vol]);
            else
                printf("0\n");
        }
        return 0;
    }

     

  • 相关阅读:
    我要把铁路修到威斯特摩兰
    1新建空白jasperreport模板
    oracle权限
    swagger配置
    lombok插件基本使用
    oracle与sqlserver的区别
    yaml语法学习
    第一个SpringBoot
    spring多环境切换
    JSR303数据校验
  • 原文地址:https://www.cnblogs.com/kedebug/p/2915647.html
Copyright © 2011-2022 走看看