题目链接

中文题 , 题意一目了然。

将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问题相关推荐

  1. HDU 1574 RP问题(DP)

    题目链接 :HDU 1574 RP问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  2. hdu 1574(01背包)

    RP问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  3. 杭电OJ分类题目(3)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...

  4. 2017 寒假练习题 Part 1

    HDU 2516 取石子游戏 原题链接:Here! 思路:第一人败的情况是 n=2,3,5,8,13...... 是个斐波那契数列  代码: /*Note:n=2 第一人败 * n=3 第一人败 *n ...

  5. HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  6. [转] HDU 题目分类

    转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...

  7. 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] 内 " ...

  8. HDU题目分类啊!!!

    分类一(详细): 分类二: 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.10 ...

  9. hdu 杭电题目分类

    View Code 1 1001 这个就不用说了吧 2 1002 简单的大数 3 1003 DP经典问题,最大连续子段和 4 1004 简单题 5 1005 找规律(循环点) 6 1006 感觉有点B ...

最新文章

  1. python 列表筛选数据
  2. Codeforces 1025D(区间dp)
  3. 专用DNS的CDN工作流程
  4. WINCE5.0+S3C2443系统每隔几分钟会自动关闭LCD显示
  5. 40款奇特的名片设计,吸引大家的眼球《上篇》
  6. PowerDesigner16.5安装
  7. 八种排序整理(六)----堆排序
  8. 内连接查询的重点分析
  9. android项目中单实例数据库类
  10. 自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术
  11. 2.JVM和DVM之间的区别
  12. 蓝桥杯2021年第十二届C++省赛第一题-空间
  13. 用VMWARE学习组网(二)
  14. 携程初赛 携程全球数据中心建设 球面上两点的最短距离 + 最小生成树
  15. 安全管理:为软件供应链部署零信任方法
  16. c语言函数.pdf文档,c语言库函数表.pdf
  17. JavaScript模板引擎
  18. 冠军方案解读 | nnUNet改进提升笔记
  19. Android-PickerView实现全国地区选择
  20. 国产车规级MCU芯片又添一重量级成员,这次竟是国家队?稳了

热门文章

  1. 致所有IT工程师的信(网络工程师的发展方向)
  2. JavaScript之Unspecified error或无法设置selected属性。未指明的错误。解决方案
  3. 源码解析 React Hook 构建过程
  4. python爬虫---从零开始(一)初识爬虫
  5. 函数的参数与函数的嵌套调用
  6. jenkins插件findbugs+pmd+checkstyle结合sonar与maven(java环境代码质量和代码规范管理)...
  7. 【ExtJS】 布局Layout
  8. vs2005无法断点调试网站,断点失效
  9. mouseOver/mouseOut 与 rollOver/rollOut的区别
  10. 博客园里有多少人对企业信息化感兴趣