zoukankan      html  css  js  c++  java
  • 动态规划的引入 P1802 5倍经验日【变形的01背包】

    题目

    https://www.luogu.com.cn/problem/P1802

     题目分析

    见代码注释

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    long long f[10001], v[10001], w[10001],v2[10001];
    int main()
    {
        int n,x;
        scanf("%d%d", &n, &x);
        for (int i = 1; i <= n; i++)
            scanf("%lld%lld%lld", &v2[i], &v[i],&w[i]);
        for (int i = 1; i <= n; i++)
        {
            for (int j = x; j >= w[i]; j--)//当f【】数组中的数字范围(也就是背包的容量范围)在w【i】到x时,表示该人有选择(可以选择使用药来赢,也可以选择不用药直接输)
            //不存在不嗑药就赢,因为w【】数组的含义就是必须嗑几个药才能赢
            {
                f[j] = max(f[j] + v2[i] , f[j - w[i]] + v[i]);//选择较大的
            }
            for (int j = w[i] - 1; j >= 0; j--)//当f【】数组中的数字范围(也就是背包的容量范围)在0到w【i】时,意思是你的要不够,你必GG,所以必输
                f[j] += v2[i];
        }
        printf("%lld", f[x]*5);
    }
    //要注意理解节省空间复杂度下的动态规划中f【】数组的含义:
    //f[i]表示容量为i的背包能获得的价值最多是多少 
  • 相关阅读:
    Vue学习笔记之Vue指令系统介绍
    Vue学习笔记之Vue的使用
    Vue学习笔记之Vue介绍
    vim笔记
    python安装包的方式
    基本认证与摘要认证
    curl常用指令
    python优缺点小结
    环境变量的作用
    mac os、linux及unix之间的关系
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13121663.html
Copyright © 2011-2022 走看看