【题目背景】

  小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 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 <bits/stdc++.h>
#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; return ;
}

P.S. 转载自LSlzf

最新文章

  1. 图解Netty之Pipeline、channel、Context之间的数据流向。
  2. UVA_11468_Substring_(AC自动机+概率动态规划)
  3. A题笔记(6)
  4. CSS+Javascript的那些框架
  5. UnderStand Perspective Rasterization, SV_POSITION(gl_FragCoord) to Pixel, SV mean Systems Value
  6. Linux下Nginx+tomcat应用系统性能优化
  7. ubuntu文本界面乱码的中国解决方案
  8. CSS3秘笈复习:第七章
  9. 利用python实现简单登陆注册系统
  10. 【Docker】基础学习及在.Net Core应用
  11. Flask开发微电影网站(四)
  12. JavaScript对象数组根据某属性sort升降序排序
  13. 【转】Chrome 控制台新玩法-console显示图片以及为文字加样式
  14. SMB溢出漏洞所需的SMB协议内容
  15. Lambda的前世今生
  16. [luogu3505][bzoj2088][POI2010]TEL-Teleportation【分层图】
  17. Bash 和 Zsh 开启 vi-mode
  18. German Collegiate Programming Contest 2013-B:Booking(贪心)
  19. C# 通过word模板动态生成Word
  20. 学习Web Service、wcf、webapi的区别

热门文章

  1. JavaDay10(下)
  2. NC反弹shell的几种方法
  3. 0级搭建类011-Oracle Linux 7.x安装(OEL 7.7) 公开
  4. C# LINQ学习笔记一:走进LINQ的世界
  5. css实现聊天气泡效果
  6. 在CSS中,link里 的rel=&quot;stylesheet&quot;是什么意思?
  7. STL标准库面试题(转)
  8. ueditor使用本地保存,自动恢复上次编辑的内容
  9. gulp打包js多个文件夹并压缩混淆,编译ES6语法,及多个import依赖由一个入口打包成一个cdn
  10. CSS伪类before,after制作左右横线中间文字效果