hdu 1574 RP问题 动态规划,01背包的变形
来源:互联网 发布:plc编程器 编辑:程序博客网 时间:2024/05/16 16:17
RP问题
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 847 Accepted Submission(s): 281
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值可能为负。
人品守恒定律更形象的描述,当发生一件好事,你从中获利,必定消耗一定量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
31-1 0 1210 200 -1-5 8 33-5 0 410 -5 -5-5 5 10
Sample Output
129
就贴个代码吧:
#include <stdio.h>#include <string.h>#define MAX 20020#define INF 1000000000int dp[MAX*10] ;int max(int a , int b){return a>b?a:b ;}int main(){int t ;scanf("%d",&t) ;while(t--){int n ;scanf("%d",&n) ;for(int i = 0 ; i < MAX ; ++i){dp[i] = -INF ;}dp[10000] = 0 ;for(int i = 0 ; i < n ; ++i){int a , b , c ;scanf("%d%d%d",&a,&b,&c);if(a>0){for(int j = b+10000 ; j>=0 ; --j){dp[j+a] = max(dp[j+a],dp[j]+c) ;}}else{for(int j = b+10000 ; j < MAX ; ++j){dp[j+a] = max(dp[j+a],dp[j]+c) ;}}}int ans = -INF ;for(int i = 0 ; i < MAX ; ++i){ans = max(dp[i],ans) ;}printf("%d\n",ans) ;}return 0 ;}
与君共勉
0 0
- hdu 1574 RP问题 动态规划,01背包的变形
- HDU 1574 RP问题(01背包变形)
- HDU - 1574 RP问题(01背包)
- hdu 1574 RP问题 dp 01背包
- 最大报销额(动态规划:01背包问题变形)
- 动态规划——背包问题变形
- 动态规划(完全背包的变形)
- HDU 1114 Piggy-Bank(完全背包动态规划+变形)
- 动态规划——背包问题变形 收藏
- POJ 1837:Balance:动态规划_背包问题变形
- 01背包问题的动态规划算法
- 动态规划:01背包问题的浅谈
- 01背包问题的动态规划解法
- 用动态规划算法的变形方法——备忘录方法,解决0-1背包问题
- 动态规划的背包问题
- 动态规划专题 01背包问题详解 HDU 2546 饭卡
- hdu 4501 动态规划 + 费用背包问题
- 动态规划--01背包问题
- opencv模拟景深效果
- file和page cache 的一些事儿
- struts2 iterator标签status属性
- hdu2566 统计硬币(枚举法||母函数)
- Android Media Framework 总纲
- hdu 1574 RP问题 动态规划,01背包的变形
- SportStore OpenCart 商城自适应主题模板 ABC-0003-06
- stitching_detail算法介绍
- HDU 3639 Hawk-and-Chicken (强连通分量+树形DP)
- 正则表达式——快速学习及常用整理
- POJ 3259 Wormholes 最短路径(Bellman Ford)
- 杭电ACM——1049Climbing Worm
- leetCode #20 Valid Parentheses
- [JAVA]选择排序,插入排序,冒泡排序