P5858 「SWTR-03」Golden Sword
题面:
题面有点长,不想粘了,QAQ。
题解:
一句话题意,你有 \(n\) 件物品需要依次放进去,每个物品放进去之后会得到一定的权值,为当前锅炉里面的物品的数量乘以 \(a_i\)
每次在放这件物品之前,你可以那出 \(0-s\) 件物品出来,但锅炉里物品的数量不能超过 \(w\)
\(dp\) 状态应该很好想。
设$ f[i][j]$ 表示放 第 \(i\) 件有 \(j\) 个物品在锅炉里的最大价值。
那么就可以有前一天的状态转移过来。
则有 \(f[i][j] = max(f[i-1][k] + j * a[i])\)
以及不拿出来的情况 \(f[i][j] = max(f[i-1][j-1])\)
然后你就可以拿到 \(85\) 分的好成绩,大雾
我们考虑一下优化,发现后面的那段柿子是个很经典的求一段区间的最小值的形式。
那我们就可以采用一下单调队列优化一下。
注意枚举 \(k\) 的时候要倒着枚举,因为你 用到的是 \(j\) 之后得状态,要先把他 \(f[i-1]\) 后面的状态先入队。
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define int long long
int n,w,s,head,tail,a[5560],f[5560][5560],q[5560];
inline int read()
{
int s = 0,w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9'){s =s * 10+ch - '0'; ch = getchar();}
return s * w;
}
signed main()
{
n = read(); w = read(); s = read(); int ans = -1e13;
for(int i = 1; i <= n; i++) a[i] = read();
memset(f,128,sizeof(f));
f[1][1] = a[1];
for(int i = 2; i <= n; i++)
{
head = 1, tail = 0;
for(int j = w; j >= 1; j--)
{
f[i][j] = max(f[i][j],f[i-1][j-1] + j * a[i]);//不放的情况
while(head <= tail && q[head] > min(w,j+s-1)) head++;//单调队列优化一下
while(head <= tail && f[i-1][q[tail]] <= f[i-1][j]) tail--;
q[++tail] = j;
f[i][j] = max(f[i][j],f[i-1][q[head]] + j * a[i]);
}
}
for(int i = 1; i <= w; i++) ans = max(ans,f[n][i]);
printf("%lld\n",ans);
return 0;
}
P5858 「SWTR-03」Golden Sword的更多相关文章
- FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...
- Louis的「每周语文」
说明:此专栏为Louis收录的经典语录及书影音标记,每周一更新. 成长的本质是变得复杂.当你的主观世界遇到客观世界,之间的那条沟,你掉进去,叫挫折,爬出来,叫成长. -- 语出罗振宇在奇葩说第四季的结 ...
- 前端构建工具之gulp(一)「图片压缩」
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
- fir.im Weekly - 如何打造 Github 「爆款」开源项目
最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...
- 更新日志 - fir.im「高级统计」功能上线
距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...
- Notepad++ 开启「切分窗口」同时检视、比对两份文件
Notepad++ 是个相当好用的免费纯文本编辑器,除了内建的功能相当多之外,也支持外挂模块的方式扩充各方面的应用.以前我都用 UltraEdit 跟 Emeditor,后来都改用免费的 Notepa ...
- 「zigbee - 1」工欲善其事必先利其器 - IAR for 8051 IDE customization
最近在实验室做一些 Zigbee 相关的事情,然而一直没在博客上记录啥东西,也不像原来在公司有动力在 Confluence wiki 上扯东扯西.直到前些阵子,跑到 feibit 论坛上(国内较大的一 ...
- 「C语言」文件的概念与简单数据流的读写函数
写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实, ...
- 「C语言」Windows+EclipseCDT下的C语言开发环境准备
之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...
随机推荐
- Fitness - 05.11
倒计时234天 从本周开始改变运动模式 跑步换到每周二.四.六进行. 每周一.三.五增加瑜伽的练习,周日山地车骑行~~~~ 久违的瑜伽课,瑜伽老师居然是男的,第一次看到这么柔软的男生~! 平时感觉不到 ...
- 如何自制WC3地形纹理贴图
http://world-editor-tutorials.thehelper.net/tilesets.php https://wenku.baidu.com/view/e761c953cc1755 ...
- Laravel5的验证码功能
第三方扩展包 mews/captcha 作为基础来实现 Laravel 中的验证码功能 安装 注册 配置验证码文件 前端引用 后端验证 安装前准备(我这边没执行这个,安装成功,但是搜到的文件有写,不清 ...
- java初探(1)之静态页面化——客户端缓存
利用服务端缓存技术,将页面和对象缓存在redis中,可以减少时间浪费,内存开销.但在每次请求的过程中,仍然会有大量静态资源的请求和返回. 使用静态页面技术,页面不必要使用页面交互技术,比如thymel ...
- 17_Python的常用模块
1.随机数模块 random 1.随机小数 import random # (0,1)随机取浮点数 random.random() # 0.17988578778011 # (1, 3)取指定范围的浮 ...
- 采用GitOps的11大原因
Kubernetes允许我们单纯地使用声明性的配置文件来管理我们的应用部署和其他基础设施组件(例如,我们现在都是YAML开发者).这使我们能够把所有这些文件放到Git仓库中,然后把它挂到流水线上(Je ...
- java多版本管理
背景 java版本的升级也比较频繁, 每年一个版本或更多 虽然java环境变量的配置无技术性可言, 但对于频繁切换也是比较枯燥的 java版本管理工具 sdkman: https://sdkman.i ...
- Linux系统安装01-centos7系统安装
2020注定是一个不平凡的年份,对于各行各业都是不小的波动.话说回来,从当前的互联网趋势来看,linux的使用以后会越来越广泛,既然之前不懂linux,那么我们就从头开始,先学习Linux的系统安装. ...
- Appium之启动第一个App
搭建appium自动化环境真是各种问题呀. 如何启动在真机上启动App? 执行操作:操作Android真机上打开手机淘宝app,并搜索“熊猫”. 脚本源码如下: from appium import ...
- [HCTF 2018]admin wp
首先打开页面,查看源码 you are not admin考虑是否为需要登录 后发现右上方有个登录 考虑密码爆破,用户名为admin,密码未知 摔进burpsuite后爆破 后得到密码为123 登录得 ...