动态规划的引入 P1802 5倍经验日变形的01背包
Posted jason66661010
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划的引入 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的背包能获得的价值最多是多少
以上是关于动态规划的引入 P1802 5倍经验日变形的01背包的主要内容,如果未能解决你的问题,请参考以下文章