NOIP模拟赛(by hzwer) T1 小奇挖矿
【题目背景】
小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 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 小奇挖矿的更多相关文章
- 2.17NOIP模拟赛(by hzwer) T1 小奇挖矿
[题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...
- NOIP模拟赛(by hzwer) T3 小奇回地球
[题目背景] 开学了,小奇在回地球的路上,遇到了一个棘手的问题. [问题描述] 简单来说,它要从标号为 1 的星球到标号为 n 的星球,某一些星球之间有航线. 由于超时空隧道的存在,从一个星球到另一个 ...
- NOIP模拟赛(by hzwer) T2 小奇的序列
[题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个长度为 n 的数列,以及 m 次询问,每次给出三个数 l,r 和 P, 询问 (a[l'] + a[l'+1] + ... + ...
- NOIP模拟赛 经营与开发 小奇挖矿
[题目描述] 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发 ...
- 2.17NOIP模拟赛(by hzwer) T3 小奇回地球
[题目背景] 开学了,小奇在回地球的路上,遇到了一个棘手的问题. [问题描述] 简单来说,它要从标号为 1 的星球到标号为 n 的星球,某一些星球之间有航线. 由于超时空隧道的存在,从一个星球到另一个 ...
- 2.17NOIP模拟赛(by hzwer) T2 小奇的序列
[题目背景] 小奇总是在数学课上思考奇怪的问题. [问题描述] 给定一个长度为 n 的数列,以及 m 次询问,每次给出三个数 l,r 和 P, 询问 (a[l'] + a[l'+1] + ... + ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 2015-9-13 NOIP模拟赛 by hzwer
好老的题了,但是还是很有做头的. 总结 不吸氧看来确实是没法用stl的啊(set常数太大了,开O2也没过) SPFA没认真学,觉得有堆优化Dijkstra就天下无敌了,今天负边权教我做人 于是苦逼的只 ...
- 2015-9-13 NOIP模拟赛解题报告(by hzwer)
小奇挖矿 「题目背景」 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞过喵星系的n个星球. 「问题描述」 星球分为2类:资源型和维修型. 1.资源型:含矿物质量a[i ...
随机推荐
- lgb模板
一 回归 1 提取训练集和测试集 2 制作标签,并检查标签是否有异常值 2 划分数据 https://www.jb51.net/article/152574.htm 3 建立model,写评价函数 h ...
- application.events 识别组合键 参考。
https://blog.csdn.net/chinayu2007/article/details/43761277 在窗体上放上ApplicationEvents控件,在OnMessage消息中加入 ...
- Elasticsearch如何关掉服务
1.使用head插件找到想关掉的节点进行关停 2.使用命令kill杀掉服务器的ES进程即可1.查找ES进程ps -ef | grep elastic 2.杀掉ES进程kill -9 2382(进程号) ...
- Web测试常用的链接测试工具
1.Xenu Link Sleuth 详细解说地址:http://home.snafu.de/tilman/xenulink.htm http://pan.baidu.com/s/1qY3Tp4C(英 ...
- Web高效管理多个项目的SVN仓库
转至:https://www.jianshu.com/p/a0af00642585 采用方案 Linux+Apache+Subversion+MySQL+JDK+Tomcat+Svnadmin 目录 ...
- 匿名函数及paramiko模块
1.匿名函数 随着程序代码的不断增加,起名字其实也是非常困难的一件事 一些简单的功能完全没必要用def函数,匿名函数足矣 def test(x,y): return x+y res = test(1, ...
- Matlab与C++混合编程 2--在C++中使用Matlab固有命令
直接在Visual Studio中运行Matlab固有命令 #include <iostream> #include"engine.h" // 添加matlab引擎库的 ...
- [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)
[BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...
- [多校联考2019(Round 4 T2)][51nod 1288]汽油补给(ST表+单调栈)
[51nod 1288]汽油补给(ST表+单调栈) 题面 有(N+1)个城市,0是起点N是终点,开车从0 -> 1 - > 2...... -> N,车每走1个单位距离消耗1个单位的 ...
- django的模板的继承与导入
1.模板继承 母版中需要继承的地方: {% block content %} {% endblock %} 对应的子版中文件最开头写: {% extends 'head_demo.html' %} 然 ...