题目链接 :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

Problem Description
在人类社会中,任何个体都具有人品,人品有各种不同的形式,可以从一种形式转换为另一种形式,从一个个体传递给另一个个体,在转换和传递的过程中,人品不会消失,也不被能创造,这就是,人品守恒定律!
人品守恒定律更形象的描述,当发生一件好事,你从中获利,必定消耗一定量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值可能为负。
Input
输入数据的第一行为一个正整数T,表示有T组测试数据。每组测试数据的第一行为一个正整数N (0 < N <= 1000),表示这个时间段在你身上可能发生N个事件。接下来N行,每行有三个整数a, b, c (0 <= |a| <= 10, 0 <= |b| <= 10000, 0 <= |c| <= 10000)。这N个事件是按照输入先后顺序先后发生的。也就是说不可能先发生第i行的事件,然后再发生i – j行的事件。
Output
对应每一组输入,在独立一行中输出一个正整数,表示最大可能获益值。
Sample Input
3 1 -1 0 1 2 10 200 -1 -5 8 3 3 -5 0 4 10 -5 -5 -5 5 10
Sample Output
1 2 9

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)相关推荐

  1. HDU 1574 RP问题

    题目链接 中文题 , 题意一目了然. 将a b c 进行处理一下. 当a > 0 时: 需要当前RP小于等于b才能触发此事件 , 触发此事件时 , 人品增加a , 获益值增加c(此时c为负) 当 ...

  2. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  3. HDU 2084 数塔 DP

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目: 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走 ...

  4. HDU 1712 裸分组dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1712 N门课M天复习,第i门课花费j天获得的效益是dp[i][j] 求最大效益 分组背包,同一门课不能选两次 三 ...

  5. HDU 4628 Pieces(DP + 状态压缩)

    Pieces 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 题目大意:给定一个字符串s,如果子序列中有回文,可以一步删除掉它,求把整个序列删除 ...

  6. hdu 4640(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 思路:f[i][j]表示一个人状态i下走到j的最小花费,dp[i][j]表示i个人在状态j下的最 ...

  7. hdu 5569(二维dp,水题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5569 解题思路:dp[i][j]表示到达(i,j)位置时的最小值.由于目标式的特点,我们一次需要走两格 ...

  8. hdu 5067(状态压缩dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 解题思路:这道题开始想复杂了,想用bfs去求出最短距离,其实没必要,因为题目中没有阻碍关系,所以 ...

  9. hdu 5639(区间dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5693 解题思路:连续消除k个数,可以表示为连续消去了若干次2个数,和若干次3个数.即k = 2*i + ...

最新文章

  1. 服务器返回数据为空,iOS 处理服务器返回数据中的null
  2. Ant Design 4.0 进行时!
  3. win10组件服务计算机是红色的,KB4023057:Windows 10更新服务组件的更新
  4. 初二下册计算机考试试题,2017下半年计算机等级考试二级Java模拟试题及答案(18)...
  5. PMP读书笔记(第4章)
  6. html如何将设置文本效果,css如何对文本进行修饰
  7. 033-Unit 11 Advanced Uses of the vi Editors
  8. 向mysql中添加更新时间_mysql 实现添加时间自动添加更新时间自动更新操作
  9. 使用了visual assist.net
  10. pmp是什么意思?pmp值得学吗?
  11. [原创]如何写好SqlHelper 之终章
  12. poj 3411 Paid Roads
  13. Servlet 生命周期的过程分析 图解
  14. 重写iframe内联框架中的内容
  15. xdg在Linux中的用法,linux-如何使用sudo获取XDG变量?
  16. Solidity随机数发生器原理与实现
  17. 360度全景虚拟漫游导览在地产景区的应用优势
  18. qnap直接用linux命令,QNAP之如何使用第三方百度网盘挂到nas上下载
  19. mysql 删除重复数据只保留一条记录
  20. python正则表达式入门_python入门_常见正则表达式匹配

热门文章

  1. 开始在linux下做c语言开发
  2. linux(CentOS版本)学习笔记1
  3. zencart安装步骤(详细)
  4. UBNT rocket M5 无线设置的有关笔记——Advanced Setting
  5. 有什么项目工时管理工具?
  6. ubuntu安装budgie桌面
  7. 《批处理BAT从入门到精通》总目录_培训教程持续更新中...
  8. matlab工程与科学绘图pdf下载,MATLAB工程与科学绘图
  9. 《“我是他妈的大专生”》
  10. 黑马程序员——Java基础(十一)之GUI