HDU 1574 RP问题(DP)
题目链接 :HDU 1574
RP问题
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 925 Accepted Submission(s): 330
人品守恒定律更形象的描述,当发生一件好事,你从中获利,必定消耗一定量RP;当发生一件不幸的事,你在其中有所损失,必定积攒一定量RP。
假设在一个时间段内在你身上可能会发生N个事件,每个事件都对应一个RP变化值a、RP门槛值b和获益值c。当RP变化值a为正,获益值c必定为负,只有你当前的RP值小于等于RP门槛值b的时候,此事件才有可能发生,当此事件发生时,你的RP值将增加|a|,获益值将减少|c|。反之,当RP变化值a为负,获益值c必定为正,只有你当前的RP值大于等于RP门槛值b的时候,此事件才有可能发生,当此事件发生时,你的RP值将减少|a|,获益值将增加|c|。
一个事件在满足上述RP条件的前提下,未必会发生。假设在这段时间之前你所具有的RP值和获益值都为0,那么过了这段时间后,你可能达到的最大获益值是多少?
注意:一个人的所具有的RP值可能为负。
0 1 背包问题,不过应该用RP值来作为状态,状态转移就是从满足门限的RP区间的状态转移到当前状态。dp[k]表示RP值为k时的最大收益,
状态转移方程:dp[i+k]=max(dp[i+a],dp[i]+c)。
因为人品可能为负数,而数组下标不能为负数,所以将0的位置转为10000,用 0 ~10000 代表RP为负数的状态,10000~20000 代表RP为正数的状态。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int INF = 0xfffffff;
const int maxn = 20010;
int dp[maxn];
int main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int a,b,c;for(int i=0;i<maxn;i++) dp[i] = -INF; //初始化所以RP的收益值为负无穷dp[10000] = 0; //初始位置的收益为0for(int i=0;i<n;i++){scanf("%d%d%d",&a,&b,&c);if(a>0)for(int j = 10000+b;j>=0;j--)dp[j+a] = max(dp[j+a] , dp[j] +c);elsefor(int j = 10000+b;j<=20000;j++)dp[j+a] = max(dp[j+a] , dp[j] +c);}int maxx = -INF;for(int i=0;i<maxn;i++){if(dp[i]>maxx)maxx = dp[i];}// maxx = max(maxx,dp[i]);printf("%d\n",maxx);}return 0;
}
转载于:https://www.cnblogs.com/chaiwenjun000/p/5321131.html
HDU 1574 RP问题(DP)相关推荐
- HDU 1574 RP问题
题目链接 中文题 , 题意一目了然. 将a b c 进行处理一下. 当a > 0 时: 需要当前RP小于等于b才能触发此事件 , 触发此事件时 , 人品增加a , 获益值增加c(此时c为负) 当 ...
- HDU 2196 Computer 树形DP经典题
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...
- HDU 2084 数塔 DP
http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目: 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走 ...
- HDU 1712 裸分组dp
http://acm.hdu.edu.cn/showproblem.php?pid=1712 N门课M天复习,第i门课花费j天获得的效益是dp[i][j] 求最大效益 分组背包,同一门课不能选两次 三 ...
- HDU 4628 Pieces(DP + 状态压缩)
Pieces 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 题目大意:给定一个字符串s,如果子序列中有回文,可以一步删除掉它,求把整个序列删除 ...
- hdu 4640(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 思路:f[i][j]表示一个人状态i下走到j的最小花费,dp[i][j]表示i个人在状态j下的最 ...
- hdu 5569(二维dp,水题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5569 解题思路:dp[i][j]表示到达(i,j)位置时的最小值.由于目标式的特点,我们一次需要走两格 ...
- hdu 5067(状态压缩dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 解题思路:这道题开始想复杂了,想用bfs去求出最短距离,其实没必要,因为题目中没有阻碍关系,所以 ...
- hdu 5639(区间dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5693 解题思路:连续消除k个数,可以表示为连续消去了若干次2个数,和若干次3个数.即k = 2*i + ...
最新文章
- 服务器返回数据为空,iOS 处理服务器返回数据中的null
- Ant Design 4.0 进行时!
- win10组件服务计算机是红色的,KB4023057:Windows 10更新服务组件的更新
- 初二下册计算机考试试题,2017下半年计算机等级考试二级Java模拟试题及答案(18)...
- PMP读书笔记(第4章)
- html如何将设置文本效果,css如何对文本进行修饰
- 033-Unit 11 Advanced Uses of the vi Editors
- 向mysql中添加更新时间_mysql 实现添加时间自动添加更新时间自动更新操作
- 使用了visual assist.net
- pmp是什么意思?pmp值得学吗?
- [原创]如何写好SqlHelper 之终章
- poj 3411 Paid Roads
- Servlet 生命周期的过程分析 图解
- 重写iframe内联框架中的内容
- xdg在Linux中的用法,linux-如何使用sudo获取XDG变量?
- Solidity随机数发生器原理与实现
- 360度全景虚拟漫游导览在地产景区的应用优势
- qnap直接用linux命令,QNAP之如何使用第三方百度网盘挂到nas上下载
- mysql 删除重复数据只保留一条记录
- python正则表达式入门_python入门_常见正则表达式匹配