P1064 [NOIP2006 提高组] 金明的预算方案

01 01 01背包的变式,有依赖的背包题
题目链接

思路

考虑到我们一般的 01 01 01背包题,动态转移方程成立条件为:若背包容量能容纳该物品,则判断取最大,否则跳过
而该题有多种状态,对于每一种物品(主物品+配套的附物品)
不取主物品
取主物品不取附属物品
取主物品和附属物品 1 1 1,不取附属物品 2 2 2(如果有的话)
取主物品和附属物品 2 2 2,不取附属物品 1 1 1(如果有的话)
取主物品和附属物品 1 , 2 1,2 1,2(如果有的话)
然后打上 01 01 01背包的板子就行了

ACcode

#include<bits/stdc++.h>

using namespace std;

const int M = 3e5 + 9;
int dp[M];
int cv[M], cw[M];
int fv[M][7], fw[M][7];

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n, m;cin >> n >> m;
    int a, b, c;
    for (int i = 1;i <= m;i++) {
        cin >> a >> b >> c;
        if (!c) {
            cv[i] = a;
            cw[i] = a * b;
        }
        else {
            fv[c][0]++;
            fv[c][fv[c][0]] = a;
            fw[c][fv[c][0]] = b * a;
        }
    }
    for (int i = 1;i <= m;i++) {
        for (int j = n;j >= cv[i];j--) {
            dp[j] = max(dp[j], dp[j - cv[i]] + cw[i]);
            if (j >= cv[i] + fv[i][1])dp[j] = max(dp[j], dp[j - cv[i] - fv[i][1]] + cw[i] + fw[i][1]);
            if (j >= cv[i] + fv[i][2])dp[j] = max(dp[j], dp[j - cv[i] - fv[i][2]] + cw[i] + fw[i][2]);
            if (j >= cv[i] + fv[i][1] + fv[i][2])dp[j] = max(dp[j], dp[j - fv[i][1] - cv[i] - fv[i][2]] + cw[i] + fw[i][1] + fw[i][2]);
        }
    }
    cout << dp[n];
    return 0;
}

相关推荐

  1. P1064 [NOIP2006 提高] 预算方案

    2024-02-18 17:52:03       62 阅读
  2. P1065 [NOIP2006 提高] 作业调度方案题目

    2024-02-18 17:52:03       52 阅读
  3. P1062 [NOIP2006 普及] 数列

    2024-02-18 17:52:03       32 阅读
  4. P1025 [NOIP2001 提高] 数划分

    2024-02-18 17:52:03       61 阅读
  5. P1025 [NOIP2001 提高] 数划分

    2024-02-18 17:52:03       45 阅读
  6. P1025 [NOIP2001 提高] 数划分

    2024-02-18 17:52:03       36 阅读
  7. P1098 [NOIP2007 提高] 字符串展开

    2024-02-18 17:52:03       30 阅读
  8. NOIP2006-B-2 开心

    2024-02-18 17:52:03       27 阅读
  9. P1094 [NOIP2007 普及] 纪念品分组

    2024-02-18 17:52:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-18 17:52:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-18 17:52:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-18 17:52:03       87 阅读
  4. Python语言-面向对象

    2024-02-18 17:52:03       96 阅读

热门阅读

  1. 冒泡排序详解

    2024-02-18 17:52:03       52 阅读
  2. 千里马平台设计说明-获取基础数据

    2024-02-18 17:52:03       57 阅读
  3. go-zero读取mysql部分字段

    2024-02-18 17:52:03       48 阅读
  4. 二分查找算法

    2024-02-18 17:52:03       50 阅读
  5. 【字符串】AC自动机

    2024-02-18 17:52:03       56 阅读
  6. 作业day6

    2024-02-18 17:52:03       46 阅读
  7. vivado FIR Filters

    2024-02-18 17:52:03       47 阅读
  8. 小程序API能力汇总——基础容器API(二)

    2024-02-18 17:52:03       41 阅读