[BZOJ 1855][SCOI 2010]股票交易(单调队列优化DP)
来源:互联网 发布:电脑淘宝闺蜜投诉入口 编辑:程序博客网 时间:2024/06/05 15:40
题目链接
http://www.lydsy.com/JudgeOnline/problem.php?id=1855
思路
很显然是个DP题,比较容易想到下面的DP做法:
用
而DP方程则为(以转移情况为购入股票举例)
这样做的正确性是显然的,
变化一下这个DP方程:
一般可以用单调队列优化的DP都能满足形如
而卖出的做法也非常相似,在这里就不再赘述了
代码
刚开始数组开大了,直接卡成TLE。。。郁闷。。。
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define MAXN 2100#define INF 0x3f3f3f3fusing namespace std;pair<int,int>q[MAXN];int f[MAXN][MAXN];int T,maxP,w;int main(){ int ans=-INF; memset(f,-INF,sizeof(f)); scanf("%d%d%d",&T,&maxP,&w); for(int i=1;i<=T;i++) { int ap,bp,as,bs; scanf("%d%d%d%d",&ap,&bp,&as,&bs); for(int j=0;j<=as;j++) f[i][j]=-ap*j; //初始化f[i][j]=-ap*j(光买了股票) for(int j=0;j<=maxP;j++) f[i][j]=max(f[i][j],f[i-1][j]); //初始化什么都没买的情况更新f数组 int k=i-w-1; //单调队列里保存的就是(j,f[w][j]+ap[i]*j(-bp[i]*j))这个二元组 if(k>=0) { int h=0,t=0; for(int j=0;j<=maxP;j++) { //买入股票 while(h<t&&q[h].first<j-as) h++; while(h<t&&q[t-1].second<=f[k][j]+ap*j) t--; q[t++]=make_pair(j,f[k][j]+ap*j); if(h<t) f[i][j]=max(f[i][j],q[h].second-ap*j); } h=0,t=0; for(int j=maxP;j>=0;j--) { //卖出股票 while(h<t&&q[h].first>j+bs) h++; //!!!!! while(h<t&&q[t-1].second<=f[k][j]+bp*j) t--; q[t++]=make_pair(j,f[k][j]+bp*j); if(h<t) f[i][j]=max(f[i][j],q[h].second-bp*j); } } ans=max(ans,f[i][0]); //显然以某天交易结束后收手不干,肯定是手上没有股票是最优的 } printf("%d\n",ans); return 0;}
0 0
- [BZOJ 1855][SCOI 2010]股票交易(单调队列优化DP)
- BZOJ 1855 [Scoi2010]股票交易 单调队列优化DP
- BZOJ 1855: [Scoi2010]股票交易:(单调队列优化DP)
- 股票交易 【SCOI 2010】HDU 3401 (单调队列优化DP入门)
- 【SCOI2010】【单调队列优化DP】股票交易
- bzoj1855 [Scoi2010]股票交易(dp+单调队列优化)
- BZOJ1858股票交易 单调队列优化DP
- bzoj1855 SCOI2010 股票交易【单调队列优化dp】
- BZOJ 1010 单调队列优化dp
- bzoj 3126 单调队列优化dp
- [BZOJ 1293] SCOI 2009 生日礼物 · 单调队列
- 单调队列优化DP
- 单调队列优化DP
- dp单调队列优化
- 单调队列--优化dp
- 单调队列优化dp
- 单调队列优化DP
- 单调队列优化DP
- mysql连接报错---java.sql.SQLException: null, message from server
- 减少C++代码编译时间的方法
- AT命令
- linux开机自动启动脚本
- “std::ios_base::Init::Init()”,referenced from 错误
- [BZOJ 1855][SCOI 2010]股票交易(单调队列优化DP)
- eclipse中用svn提交项目失败:Path is not a working copy directory
- Android研发规范
- CAS-SSO之CAS单点登录实例演示
- 9*9乘法表
- 动态存储分配
- 美国最大婚恋交友网站eHarmony的机器学习实践(转载的)
- 051页练习题11题
- 51页第11题