【题目背景】

  小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定
  路线依次飞过喵星系的 n 个星球。

【问题描述】

  星球分为 2 类:资源型和维修型。

  1. 资源型:含矿物质量 a[i],若选择开采,则得到 a[i]*p 的金钱,之后钻头
  损耗 k%,即 p=p*(1-0.01k)

  2. 维修型:维护费用 b[i],若选择维修,则支付 b[i]*p 的金钱,之后钻头修
  复 c%,即 p=p*(1+0.01c)(p 为钻头当前能力值)

  注:维修后钻头的能力值可以超过初始值
  请你帮它决策最大化这个收入

【输入格式】

  第一行 4 个整数 n,k,c,w。
  以下 n 行,每行 2 个整数 type,x。
  type 为 1 则代表其为资源型星球,x 为其矿物质含量 a[i];
  type 为 2 则代表其为维修型星球,x 为其维护费用 b[i];

【输出格式】

  输出一行一个实数(保留两位小数),表示要求的结果。

【样例输入】

  5 50 50 10
  1 10
  1 20
  2 10
  2 20
  130

【样例输出】

  375.00

【数据范围】

  对于 30%的数据 n<=100
  对于 50%的数据 n<=1000,k=100
  对于 100%的数据 n<=100000,0<=k,c,w,a[i],b[i]<=100
  保证答案不超过 10^9

【解析】

  这道题从题面就可以看出是一道动态规划的题,但有一点显然的是:前面的决策会影响后面的结果。为了消去前面的影响,我们可以从后边开始动态规划。

  设f[i]表示在第i个星球的最大收入。若当前点为资源型星球,那么如果开采就可以获得当前星球的收入,而由于耐久度会减少,前面所得到的收入要整体下降%k所以状态转移方程为f[i]=max(f[i-1],a[i]+f[i-1]*(1-0.01*k))。若当前点为维修型星球,那么同理可得:减少a[i]并让前面的收入增加%c,状态转移方程为f[i]=max(f[i-1],f[i-1]*(1+0.01*c)-a[i])。为了在状态转移时更加方便,我们可以将原来耐久度为w的钻机分解成w个耐久为一的钻机,最后给答案乘w即可。

  综上所述,状态转移方程为:

  f[i]=max(f[i-1],a[i]+f[i-1]*(1-k%))    (t[i]=1)

  f[i]=max(f[i-1],f[i-1]*(1+c%)-a[i])    (t[i]=2)

【代码】

 #include <iostream>
#include <cstdio>
#include <iomanip>
#define N 100002
using namespace std;
int n,d[N],a[N],i;
double f[N],k,c,w;
int main()
{
freopen("explo.in","r",stdin);
freopen("explo.out","w",stdout);
cin>>n>>k>>c>>w;
for(i=;i<=n;i++) cin>>d[i]>>a[i];
for(i=n;i>=;i--){
if(d[i]==) f[i]=max(f[i+],f[i+]*(-0.01*k)+a[i]);
else f[i]=max(f[i+],f[i+]*(+0.01*c)-a[i]);
}
f[]=f[]*w;
cout<<setprecision()<<fixed<<f[]<<endl;
fclose(stdin);
fclose(stdout);
return ;
}

NOIP模拟赛(by hzwer) T1 小奇挖矿的更多相关文章

  1. 2.17NOIP模拟赛(by hzwer) T1 小奇挖矿

    [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...

  2. NOIP模拟赛(by hzwer) T3 小奇回地球

    [题目背景] 开学了,小奇在回地球的路上,遇到了一个棘手的问题. [问题描述] 简单来说,它要从标号为 1 的星球到标号为 n 的星球,某一些星球之间有航线. 由于超时空隧道的存在,从一个星球到另一个 ...

  3. NOIP模拟赛(by hzwer) T2 小奇的序列

    [题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个长度为 n 的数列,以及 m 次询问,每次给出三个数 l,r 和 P, 询问 (a[l'] + a[l'+1] + ... + ...

  4. NOIP模拟赛 经营与开发 小奇挖矿

    [题目描述] 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发 ...

  5. 2.17NOIP模拟赛(by hzwer) T3 小奇回地球

    [题目背景] 开学了,小奇在回地球的路上,遇到了一个棘手的问题. [问题描述] 简单来说,它要从标号为 1 的星球到标号为 n 的星球,某一些星球之间有航线. 由于超时空隧道的存在,从一个星球到另一个 ...

  6. 2.17NOIP模拟赛(by hzwer) T2 小奇的序列

    [题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个长度为 n 的数列,以及 m 次询问,每次给出三个数 l,r 和 P, 询问 (a[l'] + a[l'+1] + ... + ...

  7. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  8. 2015-9-13 NOIP模拟赛 by hzwer

    好老的题了,但是还是很有做头的. 总结 不吸氧看来确实是没法用stl的啊(set常数太大了,开O2也没过) SPFA没认真学,觉得有堆优化Dijkstra就天下无敌了,今天负边权教我做人 于是苦逼的只 ...

  9. 2015-9-13 NOIP模拟赛解题报告(by hzwer)

    小奇挖矿 「题目背景」 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞过喵星系的n个星球. 「问题描述」 星球分为2类:资源型和维修型. 1.资源型:含矿物质量a[i ...

随机推荐

  1. 测开之路一百二十五:flask之urlencode参数传递和解析

    当get请求传参时,用?分隔参数和域名,用&分隔参数,如果参数里面本身就有&符号就会识别不出来,还是会当成分隔符,所以这些数据在传输的时候,就需要转义,现在普遍是转成urlencode ...

  2. 系统分析与设计HW5

    个人作业 领域建模 a. 阅读 Asg_RH 文档,按用例构建领域模型. 按 Task2 要求,请使用工具 UMLet,截图格式务必是 png 并控制尺寸 说明:请不要受 PCMEF 层次结构影响.你 ...

  3. C#与Java覆盖问题

    C#继承类中如含有相同的方法,避免冲突使用new关键字.在不同对象中分别对应该方法.若使用override关键字则,基类中的方法被覆盖. 如需调用非覆盖的则使用base关键字. Java中的继承类方法 ...

  4. Workflow License invalid!!

    2019/08/23-17:02:16 >> INFO >> main >> org.hibernate.cfg.HbmBinder.bindRootPersist ...

  5. 数据分析 - 缺失值、异常值、一致性分析方法及Python实现

    1.数据质量分析 数据质量分析主要任务:检查原始数据是否存在脏数据. 脏数据: 缺失值 异常值 不一致的值 重复数据及含有特殊符号(如:#.¥.*)的数据 1.1 缺失值分析 数据缺失主要包括:记录的 ...

  6. P1012拼数

    这是一道字符串的普及—的题. 输入几组数字,怎样组合起来才可以使最后结果最大.一开始这道题类似于那道删数问题,每次删除递增序列的最后一位,达到最小.而这个题我也是想到了贪心做法,于是想逐位判断,让在前 ...

  7. BSP中uboot初体验

    一. uboot源码获取 1.1. 从板级厂家获取开发板BSP级uboot(就是由开发板厂家提供的) 1.2. 从SOC厂家获取相同SOC的BSP级uboot 1.3. 从uboot官方下载 1.4. ...

  8. python day2-爬虫实现github登录

    GitHub登录 分析登录页面 开发者工具分析请求 从session请求分析得知: 1.请求的URL为:https://github.com/session 2.该请求为post请求,即需要上传dat ...

  9. springboot 配置

    springboot 配置文件中属性变量引用方式@@解析 这种属性应用方式是field_name=@field_value@. 两个@符号是springboot为替代${}属性占位符产生,原因是${} ...

  10. 结构体指针,C语言结构体指针详解

    结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针. 前面讲过,& ...