码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划的引入 P1802 5倍经验日【变形的01背包】

时间:2020-06-13 21:13:43      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:价值   pre   color   max   com   tps   代码注释   节省空间   using   

题目

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的背包能获得的价值最多是多少 

 

动态规划的引入 P1802 5倍经验日【变形的01背包】

标签:价值   pre   color   max   com   tps   代码注释   节省空间   using   

原文地址:https://www.cnblogs.com/Jason66661010/p/13121663.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!