2018.09.10 bzoj1855: [Scoi2010]股票交易(单调队列优化dp)
传送门
单调队列优化dp好题。
有一个很明显的状态设置是f[i][j]表示前i天完剩下了j分股票的最优值。
显然f[i][j]可以从f[i-w-1][k]转移过来。
方程很好推啊。
对于j<kj<kj<k和j>kj>kj>k的情况我们分别对第二维建立单调队列转移。
代码:
#include<bits/stdc++.h>
#define N 2005
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int f[N][N],n,w,P,ap[N],bp[N],as[N],bs[N],q[N],hd,tl,ans=0;
inline int max(int a,int b){return a>b?a:b;}
int main(){
n=read(),P=read(),w=read();
for(int i=1;i<=n;++i)ap[i]=read(),bp[i]=read(),as[i]=read(),bs[i]=read();
memset(f,-0x3f,sizeof(f));
for(int i=1;i<=n;++i){
for(int j=0;j<=as[i];++j)f[i][j]=-ap[i]*j;
for(int j=0;j<=P;++j)f[i][j]=max(f[i][j],f[i-1][j]);
if(i>w+1){
hd=1,tl=0;
for(int j=0;j<=P;++j){
while(hd<=tl&&q[hd]+as[i]<j)++hd;
while(hd<=tl&&f[i-w-1][j]+ap[i]*j>=f[i-w-1][q[tl]]+ap[i]*q[tl])--tl;
q[++tl]=j,f[i][j]=max(f[i][j],f[i-w-1][q[hd]]-ap[i]*(j-q[hd]));
}
hd=1,tl=0;
for(int j=P;~j;--j){
while(hd<=tl&&q[hd]-bs[i]>j)++hd;
while(hd<=tl&&f[i-w-1][j]+bp[i]*j>=f[i-w-1][q[tl]]+bp[i]*q[tl])--tl;
q[++tl]=j,f[i][j]=max(f[i][j],f[i-w-1][q[hd]]+bp[i]*(q[hd]-j));
}
}
}
for(int i=0;i<=P;++i)ans=max(ans,f[n][i]);
cout<<ans;
return 0;
}
2018.09.10 bzoj1855: [Scoi2010]股票交易(单调队列优化dp)的更多相关文章
- bzoj1855: [Scoi2010]股票交易--单调队列优化DP
单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...
- bzoj1855: [Scoi2010]股票交易 单调队列优化dp ||HDU 3401
这道题就是典型的单调队列优化dp了 很明显状态转移的方式有三种 1.前一天不买不卖: dp[i][j]=max(dp[i-1][j],dp[i][j]) 2.前i-W-1天买进一些股: dp[i][j ...
- 【bzoj1855】 [Scoi2010]股票交易 单调队列优化DP
上一篇blog已经讲了单调队列与单调栈的用法,本篇将讲述如何借助单调队列优化dp. 我先丢一道题:bzoj1855 此题不难想出O(n^4)做法,我们用f[i][j]表示第i天手中持有j只股票时,所赚 ...
- 1855: [Scoi2010]股票交易[单调队列优化DP]
1855: [Scoi2010]股票交易 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1083 Solved: 519[Submit][Status] ...
- 2018.09.06 烽火传递(单调队列优化dp)
描述 烽火台是重要的军事防御设施,一般建在交通要道或险要处.一旦有军情发生,则白天用浓烟,晚上有火光传递军情. 在某两个城市之间有 n 座烽火台,每个烽火台发出信号都有一定的代价.为了使情报准确传递, ...
- LUOGU P2569 [SCOI2010]股票交易(单调队列优化dp)
传送门 解题思路 不难想一个\(O(n^3)\)的\(dp\),设\(f_{i,j}\)表示第\(i\)天,手上有\(j\)股的最大收益,因为这个\(dp\)具有单调性,所以\(f_i\)可以贪心的直 ...
- SCOI 股票交易 单调队列优化dp
这道题 我很蒙.....首先依照搞单调队列优化dp的一般思路 先写出状态转移方程 在想法子去优化 这个题目中说道w就是这一天要是进行操作就是从前w-1天转移而来因为之前的w天不允许有操作!就是与这些天 ...
- BZOJ 1855 股票交易 - 单调队列优化dp
传送门 题目分析: \(f[i][j]\)表示第i天,手中拥有j份股票的最优利润. 如果不买也不卖,那么\[f[i][j] = f[i-1][j]\] 如果买入,那么\[f[i][j] = max\{ ...
- BZOJ1855 [Scoi2010]股票交易[单调队列dp]
题 题面有点复杂,不概括了. 后面的状态有前面的最优解获得大致方向是dp.先是瞎想了个$f[i][j]$表示第$i$天手里有$j$张股票时最大收入(当天无所谓买不买). 然后写了一个$O(n^4)$状 ...
随机推荐
- Spring boot 执行jar文件 方式
项目jar包名wxo.jar 清理,打包,跳过测试(不测试) mvn clean package -Dmaven.test.skip=true 后台执行(默认环境) nohup java -jar w ...
- 基于OpenGL编写一个简易的2D渲染框架-01 创建窗口
最近正在学习OpenGL,我认为学习的最快方法就是做一个小项目了. 如果对OpenGL感兴趣的话,这里推荐一个很好的学习网站 https://learnopengl-cn.github.io/ 我用的 ...
- vue 解决报错1
[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available ...
- spring coud feign
1. 依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...
- nmap扫描工具
1.NMap工具 主要功能:探测主机是否在线.扫描主机开放端口和嗅探网络服务,用于网络探测和安全扫描. NMap支持很多扫描技术,例如:UDP.TCPconnect().TCPSYN(半开扫描).ft ...
- Java操作Excel之Poi
package com.java1234.poi; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSF ...
- Can not find the tag library descriptor for "http://www.springframework.org/tags"
1.Download the Spring dependency jar2.Place it to the lib folder path is /WEB-INF/lib/spring.jar 3.T ...
- asp.net core in centos
CentOS 7部署ASP.NET Core应用程序 看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不 ...
- 团队作业4 Alpha冲刺
第一天 日期:2018/6/13 1.今日完成任务情况以及遇到的问题 许征航:实现了推荐算法的基础逻辑,并按照模块化的思想对算法进行了分步整理. 遇到的问题:现有条件无法实现协同过滤算法,需要简化模型 ...
- java script btoa与atob的
javascript原生的api本来就支持,Base64,但是由于之前的javascript局限性,导致Base64基本中看不中用.当前html5标准正式化之际,Base64将有较大的转型空间,对于H ...