挖煤

【问题描述】
众所周知, 小C是挖煤好手。
今天他带着他的魔法镐子去挖煤 ,他的镐子一开始有$w$点魔力。他的挖煤 路线 上会依次 经过$n$个地点, 地点, 每个 地点是煤矿或者补给站,设小C当前镐子魔力值 为$p$,第$i$个地点如果是煤矿,他可以开采,开采,获得 $a_i*p$的金钱,但镐子的魔力值魔力值减少$k%$;如果是补给站,他可以花$a_i*p$的金钱令镐子的魔力值增加$c%$。每个地 点可以进行至多一次操作。
小C想知道他的最大收益。
【输入格式】

第一行 4个整数 $n,k,c,w$。
接下来$n$行, 每行 两个 整数$t_i,a_i$,若$t_i=1$,$i$号地点为煤矿;若$t_i=2$,$i$号地点为补给站

【输出格式】

输出 一个 实数, 实数, 表示 答案, 保留 2位小数。

恩,DP好题,难度不大,但是想法比较好。

分析:

对于一个煤矿,如果我们挖了那么之后的的收益就要乘上$(1-k%)$。那么,如果我们能先知道之后的收益为多少,然后再来考虑这个位置挖还是不挖就很容易了。

设$f[i]$表示从$i$开始的最大收益,转移:$f[i]=max(f[i+1],f[i+1]*(1-k%)+a[i])$。补给站的转移类似。

这题考虑了从后向前DP,和自己之前写过的DP都不太一样,考场上想了半天正着做,$n^3$的DP都打炸了,直接心态崩掉。

DP题还是多写点好。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define N 100005
using namespace std;
int n,k,c,w,t[N],a[N];
double f[N],ans;
int main(){
scanf("%d%d%d%d",&n,&k,&c,&w);
for(int i=1;i<=n;i++) scanf("%d%d",&t[i],&a[i]);
f[n+1]=0;
for(int i=n;i;i--){
if(t[i]==1) f[i]=max(f[i+1],f[i+1]*(1-1.0*k/100.0)+1.0*a[i]);
else f[i]=max(f[i+1],f[i+1]*(1+1.0*c/100.0)-1.0*a[i]);
ans=max(ans,f[i]*w);
}
printf("%.2lf\n",ans);
return 0;
}

DTOJ 4027:挖煤的更多相关文章

  1. 挖煤(coal)

    挖煤(coal) solution 我好弱,啥也想不到. 想了很久dp,这有后效性啊. 结果倒着做就可以了,因为后面的不会影响前面的. 考虑前面的影响后面:挖煤相当于让后面所有a[I]*(1+k%) ...

  2. python多种格式数据加载、处理与存储

    多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...

  3. 【BZOJ-2730】矿场搭建 Tarjan 双连通分量

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1602  Solved: 751[Submit][Statu ...

  4. php的clone 浅拷贝

    总所周知 php 的 clone方法 拷贝一个对象 而且还是所谓的浅拷贝 一时迷茫 今天终于整明白了 <?php class a { pulic $data; function __constr ...

  5. 矿场搭建(codevs 1996)

    题目描述 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使 ...

  6. WordPress博客教程:博客赚钱

    稍有关注独立博客的人都应该知道,中文博客实现盈利非常艰难,至少对于大部分中文博客来说是这样的.但很多时候我们不得不往赚钱的方向前进,至少要交得起域名和空间的租用费吧.不过期待赚钱前,你必须思考下如何提 ...

  7. Java生成 Word文档的并打印解决方案

    户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈. POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个 ...

  8. 【BZOJ 2730】 [HNOI2012]矿场搭建

    Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...

  9. CyanogenMod刷机以及Google Play应用商店安装方法介绍

    http://blog.csdn.net/zcynical/article/details/19241595 写在前面: 本文介绍的方法除第一步外,适用于所有CM系统支持的设备,第一步由于用到了PC上 ...

随机推荐

  1. 百度OCR技术博客

    百度OCR工具链使用 百度OCR的API使用总体来说比较容易,主要步骤为:注册云平台并登录,选择服务并创建应用,保存API Key以及Secret Key,选择调用API. 注册登录百度云平台 首先需 ...

  2. 升级 dubbo 小心 default.version

    上周遇到个关于升级dubbo 2.6 到2.7的兼容性问题,差点造成线上故障,这里记录下,也给大家提个醒. 问题回放 有一个接口的提供方(dubbo 2.6.6)这么配置接口的版本号 <dubb ...

  3. candy leetcode C++

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  4. Linux 文本三剑客之 sed

    Linux 系统中一切皆文件. 文件是个文本.可以读.可以写,如果是二进制文件,还能执行. 在使用Linux的时候,大都是要和各式各样文件打交道.熟悉文本的读取.编辑.筛选就是linux系统管理员的必 ...

  5. 2021.11.2-测试T1数独

    痛苦 题目 数 独 [问题描述] 给定一个9*9矩阵,对其进行几种操作,分别是插入,删除,合并,查询,输出 主要学到了一些特别的操作. (1)备份( 本蒟蒻第一次了解到) (2)对与数据的一些特别的改 ...

  6. 『学了就忘』Linux基础命令 — 34、配置网络相关命令

    目录 1.配置网络常用命令 2.ifconfig命令 3.ping命令 4.netstat 命令 使用1:查看本机开启的端口 使用2:查看本机有哪些程序开启的端口 使用3:查看所有连接 使用4:查看网 ...

  7. 实验8:数据平面可编程实践——P4

    一.实验目的 掌握V1Model框架下P4_16的程序结构和基本语法 能够运用 P4 进行简单数据平面编程 二.实验报告 在修改basic_tunnel.p4的内容之后输入make run 验证创建结 ...

  8. FZU ICPC 2020 寒假训练 5 —— 排序

    P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的 N 个数从小到大排序后输出.快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成. ...

  9. 运行脚本 结果出现 Vim: Warning 并且卡住不能输入其它命令

    当我在执行一个 关于执行linux操作的php脚本时,就出现了以下信息:"Vim: Warning: Output is not to a terminal",接着出现了一大堆的字 ...

  10. ES6—数值(Number,Math对象)(复习+学习)

    ES6-数值(Number,Math对象)(复习+学习) 每天一学,今天要学习ES6的关于数的扩展以及复习,然后通过看书,查阅资料,以及webAPI来搞清楚遇到的,没见过的对象方法等等,下面为本次学习 ...