HDU 1574 RP问题
题目链接
中文题 , 题意一目了然。
将a b c 进行处理一下。
当a > 0 时:
需要当前RP小于等于b才能触发此事件 , 触发此事件时 , 人品增加a , 获益值增加c(此时c为负)
当a < 0 时
需要当前RP大于等于b才能触发此事件 , 触发此事件时 , 人品增加a(此时a为负) , 获益值增加c
那么 可以设dp[i]为RP为i时,获得的最大获益值。
因为b可能为负(一个人的RP可能为负) , 所以对b进行小小的处理 , 增加10000 因为 b >= -10000 加上10000之后就变0了
状态转移方程为:
dp[i+a] = max(dp[i] + c , dp[i+a]);
0-1背包 , 所以要注意循环顺序 , 不要做成了完全背包了。
代码如下:
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <iostream> 6 #include <map> 7 #include <list> 8 #include <queue> 9 #include <stack> 10 #include <string> 11 #include <algorithm> 12 #include <iterator> 13 using namespace std; 14 #define MAXN 20020 15 #define INF 0x3f3f3f3f 16 #define MOD 1000000007 17 #define eps 1e-6 18 #define LL long long 19 bool vis[MAXN]; 20 int dp[MAXN]; 21 int T,n; 22 void init() 23 { 24 memset(dp , 0 , sizeof(dp)); 25 memset(vis , false , sizeof(vis)); 26 dp[10000] = 0; 27 vis[10000] = true; 28 } 29 void read_cal() 30 { 31 int a,b,c; 32 init(); 33 scanf("%d",&n); 34 for(int i = 0; i < n; i ++) 35 { 36 scanf("%d %d %d",&a,&b,&c); 37 b += 10000; 38 if(a >= 0 ) 39 { 40 for(int j = b; j >= 0; j --) 41 if(vis[j]) 42 { 43 if(!vis[j+a]) 44 { 45 vis[j+a] = true; 46 dp[j+a] = dp[j] + c; 47 } 48 else 49 dp[j+a] = max(dp[j] + c , dp[j + a]); 50 } 51 } 52 else if(a < 0) 53 { 54 for(int j = b; j < MAXN; j ++) 55 if(vis[j]) 56 { 57 if(!vis[j+a]) 58 { 59 vis[j+a] = true; 60 dp[j+a] = dp[j] + c; 61 } 62 else 63 dp[j+a] = max(dp[j] + c , dp[j+a]); 64 } 65 } 66 } 67 int ans = -INF; 68 for(int i = 0; i < MAXN; i ++) 69 if(vis[i]) ans = max(ans , dp[i]); 70 printf("%d\n",ans); 71 } 72 73 int main() 74 { 75 scanf("%d",&T); 76 while(T--) 77 { 78 read_cal(); 79 } 80 return 0; 81 }
View Code
转载于:https://www.cnblogs.com/By-ruoyu/p/4467709.html
HDU 1574 RP问题相关推荐
- HDU 1574 RP问题(DP)
题目链接 :HDU 1574 RP问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 1574(01背包)
RP问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Des ...
- 杭电OJ分类题目(3)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...
- 2017 寒假练习题 Part 1
HDU 2516 取石子游戏 原题链接:Here! 思路:第一人败的情况是 n=2,3,5,8,13...... 是个斐波那契数列 代码: /*Note:n=2 第一人败 * n=3 第一人败 *n ...
- HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- [转] HDU 题目分类
转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...
- HDU多校4 - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?!(单调栈)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问给出一个区间 [l,r][l,r][l,r],要求输出区间 [l,r][l,r][l,r] 内 " ...
- HDU题目分类啊!!!
分类一(详细): 分类二: 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.10 ...
- hdu 杭电题目分类
View Code 1 1001 这个就不用说了吧 2 1002 简单的大数 3 1003 DP经典问题,最大连续子段和 4 1004 简单题 5 1005 找规律(循环点) 6 1006 感觉有点B ...
最新文章
- python 列表筛选数据
- Codeforces 1025D(区间dp)
- 专用DNS的CDN工作流程
- WINCE5.0+S3C2443系统每隔几分钟会自动关闭LCD显示
- 40款奇特的名片设计,吸引大家的眼球《上篇》
- PowerDesigner16.5安装
- 八种排序整理(六)----堆排序
- 内连接查询的重点分析
- android项目中单实例数据库类
- 自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术
- 2.JVM和DVM之间的区别
- 蓝桥杯2021年第十二届C++省赛第一题-空间
- 用VMWARE学习组网(二)
- 携程初赛 携程全球数据中心建设 球面上两点的最短距离 + 最小生成树
- 安全管理:为软件供应链部署零信任方法
- c语言函数.pdf文档,c语言库函数表.pdf
- JavaScript模板引擎
- 冠军方案解读 | nnUNet改进提升笔记
- Android-PickerView实现全国地区选择
- 国产车规级MCU芯片又添一重量级成员,这次竟是国家队?稳了
热门文章
- 致所有IT工程师的信(网络工程师的发展方向)
- JavaScript之Unspecified error或无法设置selected属性。未指明的错误。解决方案
- 源码解析 React Hook 构建过程
- python爬虫---从零开始(一)初识爬虫
- 函数的参数与函数的嵌套调用
- jenkins插件findbugs+pmd+checkstyle结合sonar与maven(java环境代码质量和代码规范管理)...
- 【ExtJS】 布局Layout
- vs2005无法断点调试网站,断点失效
- mouseOver/mouseOut 与 rollOver/rollOut的区别
- 博客园里有多少人对企业信息化感兴趣