luogu 2569 股票交易 单调队列dp
注意转移方程
分1.凭空买 2.不买不卖 3.在原来基础上买 4.在原来基础上卖 四种情况
head=1,tail=0;再判断一下head<=tail也可以
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,m,w,ans;
int ap[N],bp[N],as[N],bs[N];
int f[N][N];
int q[],head=,tail=;
int main()
{
scanf("%d%d%d",&n,&m,&w);
for(int i=;i<=n;i++)
scanf("%d%d%d%d",&ap[i],&bp[i],&as[i],&bs[i]); memset(f,,sizeof f);
for(int i=;i<=n;i++) f[i][]=;
for(int i=;i<=n;i++){
for(int j=;j<=as[i];j++) f[i][j]=-ap[i]*j;
for(int j=m;j>=;j--) f[i][j]=max(f[i][j],f[i-][j]);
if(i-w->=)
{
head=;tail=;
for(int j=;j<=m;j++)
{
while(head<=tail&&q[head]<j-as[i]) head++;
if(head<=tail) f[i][j]=max(f[i][j],f[i-w-][q[head]]-ap[i]*(j-q[head]));
while(head<=tail&&f[i-w-][j]+ap[i]*j>=f[i-w-][q[tail]]+ap[i]*q[tail]) tail--;
q[++tail]=j; }
head=;tail=;
for(int j=m;j>=;j--)
{
while(head<=tail&&q[head]>j+bs[i]) head++;
if(head<=tail) f[i][j]=max(f[i][j],f[i-w-][q[head]]+bp[i]*(q[head]-j));
while(head<=tail&&f[i-w-][j]+bp[i]*j>=f[i-w-][q[tail]]+bp[i]*q[tail]) tail--;
q[++tail]=j; }
}
}
for(int i=;i<=m;i++) ans=max(f[n][i],ans);
printf("%d",ans);return ;
}
luogu 2569 股票交易 单调队列dp的更多相关文章
- BZOJ1855 [Scoi2010]股票交易[单调队列dp]
题 题面有点复杂,不概括了. 后面的状态有前面的最优解获得大致方向是dp.先是瞎想了个$f[i][j]$表示第$i$天手里有$j$张股票时最大收入(当天无所谓买不买). 然后写了一个$O(n^4)$状 ...
- POJ 3017 单调队列dp
Cut the Sequence Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8764 Accepted: 2576 ...
- [TyvjP1313] [NOIP2010初赛]烽火传递(单调队列 + DP)
传送门 就是个单调队列+DP嘛. ——代码 #include <cstdio> ; , t = , ans = ~( << ); int q[MAXN], a[MAXN], f ...
- zstu 4237 马里奥的求救——(单调队列DP)
题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4237 这题可以转化为每次可以走g~d+x步,求最大分数,且最大分数的步数最少. ...
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...
- LUOGU P2569 [SCOI2010]股票交易(单调队列优化dp)
传送门 解题思路 不难想一个\(O(n^3)\)的\(dp\),设\(f_{i,j}\)表示第\(i\)天,手上有\(j\)股的最大收益,因为这个\(dp\)具有单调性,所以\(f_i\)可以贪心的直 ...
- 1855: [Scoi2010]股票交易[单调队列优化DP]
1855: [Scoi2010]股票交易 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1083 Solved: 519[Submit][Status] ...
- 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 股票交易 单调队列优化 DP
描述 某位蒟佬要买股票, 他神奇地能够预测接下来 T 天的 每天的股票购买价格 ap, 股票出售价格 bp, 以及某日购买股票的上限 as, 某日出售股票上限 bs, 并且每次股票交 ♂ 易 ( 购 ...
随机推荐
- selenium js
这几天的任务量比较大,还有一个挺棘手的网站cfda,不巧的是数据量还挺大,40W关于企业信息.上来就是debugger pause,调试中断,开始还是挺懵逼的,但这个还算简单毕竟google,百度,就 ...
- Centos7下源码编译安装python3.6
测试环境: 操作步骤: 1. 下载Python源码包(python3.6.0) 官网下载地址:https://www.python.org/downloads/ 搜狐下载地址:http://mirro ...
- Git Base For Linux
GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html Linux安装git,做个记录吧(使用github提供的隐私邮箱) # git官 ...
- iview表单验证下拉框不通过问题
iview表单验证的步骤: 第一步:给 Form 设置属性 rules :rules 第二步:同时给需要验证的每个 FormItem 设置属性 prop 指向对应字段即可 prop=”“ 第三步:注意 ...
- 洛谷P1712 区间
题意:给你n个区间,从中选择m个,使得它们有交,且最长与最短区间的差值最小. 解:这道题我想了好多的,nlog²n错的,nlogn错的,最后终于想出nlogn的了...... 把区间按照长度排序,然后 ...
- n+lognlogV查找最大值
来自Blogewoosh #6. 啃了一下,写个翻译吧. 问题:你有一个数组,你不知道每个元素的大小,但是能够提出询问:a[x]是否>=v?你需要找出这个数组的最大值,只能询问n + lognl ...
- 向redis中添加删除list列表
转: 向redis中添加删除list列表 2018年04月18日 15:44:54 luo_yu_1106 阅读数:4082 一.添加 向redis中添加队列有两种方式 1.lpush l是lef ...
- rm刷机 root
http://www.miui.com/download-290.html http://www.miui.com/shuaji-329.html 小米稳定版 不可以root 只有升级到上面的开 ...
- vue的一些小坑
1.$refs使用时机 尝试在watch的时候使用$refs,发现里面都是空的,然后google了一下,$refs需要在整个组件挂载完成后才能使用 解决方法:使用setTimeout setTImeo ...
- o(1), o(n), o(logn), o(nlogn)
转自:https://blog.csdn.net/Mars93/article/details/75194138 在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn) ...