【题目链接luogu】

它……又是个DP

我……我讨厌DP!?

然后又是读入,显然用快读啊:(数据范围还是很大的)(习惯)

然后我们发现,不论是损耗值维修值,还是采矿所得,维修花费,都带着个p,因此我们可以把p提出来?

dp[i]表示第i个星球~第n个星球的最大赚取费用;

那么我们的解就是dp[1];

考虑一下:

假设第i个是资源型,在之前已经求出dp[i+1](代表从i+1开始选,1~i一概略过)的最大金钱数,那么dp[i]=max(dp[i+1]/*这个不选*/, a[i]+dp[i+1]*(1-0.01*k)/*第i个选了,加上金钱,当前钻头能力系数变为原来的(1-0.01*k),那么后面的得到的最大金钱数也变为原来的(1-0.01*k)*/)

那么如果第i个是资源型也同理,如果我们选了它,那么对后面dp[i+1],会使它的钻头能力变为原来的(1+0.01*c)倍,当然记得减去a[i](把p已经提出来了qwq)

因此核心代码:

if(t[i]==) dp[i]=max(dp[i+],dp[i+]*(-0.01*k)+a[i]);
else dp[i]=max(dp[i+],dp[i+]*(+0.01*c)-a[i]);

最后不要忘记再将w乘回来(因为实际上p的改变都乘在dp数组中了,所以只需要乘原始值)

#include<bits/stdc++.h>

using namespace std;

inline int read(){
int ans=;
char last=' ',ch=getchar();
while(ch>''||ch<'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int n;
double k,c,w;
int x[],type[];
double f[]; int main(){
n=read();
scanf("%lf%lf%lf",&k,&c,&w);
for(int i=;i<=n;i++){
type[i]=read();
x[i]=read();
}
for(int i=n;i>=;i--){
if(type[i]==) f[i]=max(f[i+],f[i+]*(-0.01*k)+x[i]);
else f[i]=max(f[i+],f[i+]*(+0.01*c)-x[i]);
}
printf("%.2lf",f[]*w);
return ;
}

忍不住说某些s*jl

end-

最新文章

  1. 转载一些Android性能优化建议
  2. Web调试利器OpenWindow
  3. node_nibbler:自定义Base32/base64 encode/decode库
  4. 奇怪吸引子---Rucklidge
  5. 堡垒机环境-jumpserver部署
  6. WPF 得到子指定元素方法和得到指定子元素集合方法MvvM得到焦点
  7. java call sap
  8. require.js学习笔记(内容属于转载总结)
  9. 【BZOJ 3172】 [Tjoi2013]单词
  10. Android实例-TTabControl的使用(XE8+小米2)
  11. linux搜索jar内容
  12. C# dynamic关键字的使用方法
  13. 怎样通过WireShark抓到的包分析出SIP流程图
  14. Qt 之 入门例程(二)
  15. 你以为你真的会用编辑器----之Emacs
  16. CentOS 7 安装serverjre 9
  17. MYSQL内置MYSQL数据库中你可以得到的信息
  18. codeforces305A
  19. inux中ifreq 结构体分析和使用(转)
  20. ubuntu下TFTP Server 的安装和使用方法

热门文章

  1. 4. ClustrixDB CLX命令详解
  2. sqljob
  3. Linux入门培训教程 linux系统中文件I/O教程
  4. Kotlin使用率达35%,Java要退位了?
  5. windows 全局安装 express 但无法命令行执行
  6. python3.7--pycharm selenium自启360浏览器/360极速浏览器方法
  7. android UI设计及开发
  8. FineReport打印方式(转)
  9. web开发中会话跟踪的方法
  10. keepalive + nginx 搭建高可用集群动态网站