LGTB 最近在玩一个类似DOTA 的游戏名叫THD
  有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面
每个小兵有一定的血量hi,杀死后有一定的金钱gi
  每一秒,他都可以攻击任意一个活着的小兵,对其造成P 点伤害,如果小兵的血量低于1 点,小兵死亡,他
得到金钱。他也可以不攻击任何小兵。
  每一秒LGTB 攻击完毕之后,塔会攻击距离塔最近的一个活着的小兵,对其造成Q 点伤害,如果小兵的血
量低于1 点,小兵死亡,LGTB 不会得到金钱
  现在LGTB 想知道,在他选择最优策略时,他能得到多少钱。
输入
输入第一行包含3 个整数P, Q, N
接下来N 行,每行包含2 个整数hi, gi
第i 个小兵和塔之间的距离为i
输入的意义如题面所示
对于20% 的数据,$1 \leqslant N \leqslant 4$
对于50% 的数据,$1 \leqslant N \leqslant 20$
对于100% 的数据,$20 \leqslant P, Q \leqslant 200$, $1 \leqslant N \leqslant 100$, $1 \leqslant h_{i} \leqslant 200$, $1 \leqslant g_{i} \leqslant 10^{6}$
输出
输出包含一个整数W,代表LGTB 最多能获得的金钱
样例
样例输入样例输出
20 60 3
80 100
80 200
120 300
500
4


  假如我们要得到第$i$个士兵的收益,我们可以贪心地让塔打小兵尽量多的次数,然后让LGTB去补刀。当然这样不一定一次能打死,所以需要在补刀之前还需打上几次。

  所以用$f[i][j]$表示当前考虑到第$i$个士兵时(前面的士兵已经被消灭了),当前积攒了$j$次攻击机会时的最大收益,

  第一种操作是不管这个小兵,那么直接让塔把它打死,那么就可以得到一些攻击机会。

  第二种操作是在塔把它打残后补刀,这样会消耗一些攻击机会,同时会得到一些收益。

Code

 #include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("thd.in");
ofstream fout("thd.out");
typedef class xb{
public:
int money; //钱数
int health; //生命值
int kill;
int pkill;
}xb;
int p,q,n;
xb *xbs;
int f[][];
istream& operator >>(istream& in, xb& x){
in>>x.health>>x.money;
}
int main(){
fin>>p>>q>>n;
xbs = new xb[(const int)(n + )];
for(int i = ; i <= n; i++){
fin>>xbs[i];
xbs[i].kill = ( xbs[i].health - )/q; //塔把士兵i打成残血的次数
xbs[i].pkill = ( xbs[i].health - xbs[i].kill * q - )/p + ; //塔把士兵打成残血后,玩家打死士兵的次数
}
for(int i = ;i <= n;i++){ //f数组初始化
for(int j =; j <= ;j++){
f[i][j] = -;
}
}
f[][] = ;
for(int i = ; i <= n;i++){
for(int j = ;j <= ;j++){
f[i][j + xbs[i].kill + ] = max(f[i - ][j], f[i][j + xbs[i].kill + ]);
if(j >= xbs[i].pkill - xbs[i].kill){
f[i][j - (xbs[i].pkill - xbs[i].kill)] = max(f[i - ][j] +
xbs[i].money, f[i][j - (xbs[i].pkill - xbs[i].kill)]);
}
}
}
int maxv = f[n][];
for(int i = ;i <= ;i++)
maxv = max(f[n][i], maxv);
fout<<maxv;
return ;
}

[noip模拟题]LGTB 玩THD的更多相关文章

  1. 神奇的NOIP模拟赛 T3 LGTB 玩THD

    LGTB 玩THD LGTB 最近在玩一个类似DOTA 的游戏名叫THD有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi每一秒,他都可以攻 ...

  2. [DP] LGTB 玩THD (复杂状态DP)

    LGTB 玩THD LGTB 最近在玩一个类似DOTA 的游戏名叫THD有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi每一秒,他都可以攻 ...

  3. 神奇的NOIP模拟赛 T1 LGTB 玩扫雷

    LGTB 玩扫雷 在一个n m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示).LGTB 想在每个空地上写下它周围8 个方向相邻的格子中有几个雷.请帮助他输出写了之后的棋盘 ...

  4. NOIP模(ka)拟(chang)测试30 考试报告

    应得分:300 实得分:210 毒瘤卡常出题人,卡掉90分! T1 Return 开个副本数组sort一下,unique去重就可以啦.时间复杂度$ O(nlog2(n)) $ T2 One 其实就是约 ...

  5. NOIP simulation

    NOIP 模拟赛Day 1题目名称LGTB 玩扫雷LGTB 学分块LGTB 打THD英文代号mine divide thd时限1 秒1 秒1 秒输入文件mine.in divide.in thd.in ...

  6. 有趣的线段树模板合集(线段树,最短/长路,单调栈,线段树合并,线段树分裂,树上差分,Tarjan-LCA,势能线段树,李超线段树)

    线段树分裂 以某个键值为中点将线段树分裂成左右两部分,应该类似Treap的分裂吧(我菜不会Treap).一般应用于区间排序. 方法很简单,就是把分裂之后的两棵树的重复的\(\log\)个节点新建出来, ...

  7. matlab第一个小应用

    今天安装了matlab,以前还是上线性代数的时候,老师让用过,以及水了一次数模的时候玩了一下.以前太年轻,总觉得这个用处不大虽然别人一直强调这个神器... 到了自己要用的时候才会意识到.大家可能也都听 ...

  8. Yali7月集训Contest2 T1 Cube 题解

    题目链接: 连我们都只有纸质题目...话说雅礼集训都是这样的吗... 大意 0维基本图形是一个点 1维基本图形是一条线段 2维基本图形是一个正方形 3维基本图形是一个正方体 4维基本图形是... 求\ ...

  9. MAC安裝《Genymotion Android模擬器》大玩Android APP (神魔之塔)

    链接地址:http://www.minwt.com/mac/10083.html/comment-page-2 MAC» 智慧型裝罝» Android | 2014/02/12 Android是一個開 ...

随机推荐

  1. hadoop HA架构安装部署(QJM HA)

    ###################HDFS High Availability Using the Quorum Journal Manager########################## ...

  2. iOS核心动画の摘记

  3. LightOJ 1027 - A Dangerous Maze(求期望)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1027 题意:又一个迷宫,有n个门,每个门又一个值num,如果num>0 说明在n ...

  4. 2015 湘潭大学程序设计比赛(Internet)--D题-最小的数

    最小的数 Accepted : 47   Submit : 276 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 给你一个n位数,每次操作可以 ...

  5. 洛谷P2661 信息传递 [NOIP2015] 并查集/乱搞 (待补充!

    感觉我好水啊,,,做个noip往年题目还天天只想做最简单的,,,实在太菜辽 然后最水的题目还不会正解整天想着乱搞,,,  虽然也搞出来辽233333 好滴不扯辽赶紧写完去做紫题QAQ 正解:并查集  ...

  6. 在scrapy中使用mongodb管道

    pipelines.py import json from scrapy.conf import settings from pymongo import MongoClient class SunP ...

  7. ListView and gridview常用属性

    刷新:notifyDataSetChanged 1.gridview常用属性 GridView的一些特殊属性:   1.Android:numColumns=”auto_fit”   //GridVi ...

  8. 应用笔画宽度变换(SWT)来检测自然场景中的文本

    Introduction: 应用背景:是盲人辅助系统,城市环境中的机器导航等计算机视觉系统应用的重要一步.获取文本能够为许多视觉任务提供上下文的线索,并且,图像检索算法的性能很大部分都依赖于对应的文本 ...

  9. ASP.NET一个页面的生命周期

    在学习ASP.NET页面生命周期前,需要先了解之前的ASP.NET的基本运行机制,在理解ASP.NET基本运行机制原理后,下面将介绍ASP.NET的生命周期中,页面从创建到处理结束的过程中ASP.NE ...

  10. 混淆矩阵在Matlab中PRtools模式识别工具箱的应用

    声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验. 混淆矩阵是模式识别中的常用工具,在PRTools工具箱中有直接 ...