HDU 3401 Trade(单调队列优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401
题意:炒股。第i天买入一股的价钱api,卖出一股的价钱bpi,最多买入asi股,最多卖出bsi股。两次操作(买入或卖出)中间必须相差W天。炒股时间为n。任意时间手中的股票不大于MaxP。求最大收益。
dp[i][j]代表第i天手上有j股的最大收益,dp[i][j]=max(dp[i-1][j],dp[i-W][k]+(j-k)*ap[i],dp[i-W][k]+(k-j)*bp[i]);
dp[i-W][k]+j*ap[i]-k*ap[i];
dp[i-W][k]+k*bp[i]-j*bp[i];
用单调队列维护
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
#define inf 0x7fffffff
struct op{
int x,p;
}q[],temp;
int n,m,w;
int ap[],bp[],as[],bs[];
int dp[][],h,t;
int main(){
int Tcase;
scanf("%d",&Tcase);
while (Tcase--){
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]);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
dp[i][j]=-inf;
for (int i=;i<=w+;i++)
for (int j=;j<=as[i];j++)
dp[i][j]=-ap[i]*j;
for (int i=;i<=n;i++){
for (int j=;j<=m;j++)
dp[i][j]=std::max(dp[i][j],dp[i-][j]);
if (i<=w+) continue;
h=t=;
for (int j=;j<=m;j++){
temp.p=j;
temp.x=dp[i-w-][j]+ap[i]*j;
for (;h<t&&q[t-].x<temp.x;t--);
q[t++]=temp;
for (;h<t&&q[h].p+as[i]<j;h++);
dp[i][j]=std::max(dp[i][j],q[h].x-ap[i]*j);
}
h=t=;
for (int j=m;j>=;j--){
temp.p=j;
temp.x=dp[i-w-][j]+bp[i]*j;
for (;h<t&&q[t-].x<temp.x;t--);
q[t++]=temp;
for (;h<t&&q[h].p-bs[i]>j;h++);
dp[i][j]=std::max(dp[i][j],q[h].x-bp[i]*j);
}
}
int ans=;
for (int i=;i<=m;i++)
ans=std::max(ans,dp[n][i]);
printf("%d\n",ans);
}
}
HDU 3401 Trade(单调队列优化)的更多相关文章
- HDU 3401 Trade(斜率优化dp)
http://acm.hdu.edu.cn/showproblem.php?pid=3401 题意:有一个股市,现在有T天让你炒股,在第i天,买进股票的价格为APi,卖出股票的价格为BPi,同时最多买 ...
- HDU-3401 Trade 单调队列优化DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401 DP方程容易想出来,f[i][j]表示第i天拥有j个股票的最优解,则: 1.不买不卖,f[i][ ...
- hdu3401 Trade 单调队列优化dp
Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 3507 PrintArticle (单调队列优化)
题意:给出一个数列C,一个数字M,将数列分成若干段,每段的代价为(设这段的数字为k个): dp[i]=min(dp[j]+(sum[i]-sum[j])*(sum[i]-sum[j])+M) 若j1& ...
- 【单调队列优化dp】HDU 3401 Trade
http://acm.hdu.edu.cn/showproblem.php?pid=3401 [题意] 知道之后n天的股票买卖价格(api,bpi),以及每天股票买卖数量上限(asi,bsi),问他最 ...
- 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 ...
- 单调队列优化DP,多重背包
单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...
- HDU 3401 Trade
Trade Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 3401 ...
- 单调队列优化DP——习题收集
前言 感觉可以用单调队列优化dp的模型还是挺活的,开个随笔记录一些遇到的比较有代表性的模型,断续更新.主要做一个收集整理总结工作. 记录 0x01 POJ - 1821 Fence,比较适合入门的题, ...
随机推荐
- SSH自动部署(转)
我的是windows环境,目前开发的过程中,有些项目需要一下子部署到很多的linux服务器上.写了个脚本能够自动上传文件和执行部署任务.完成这个任务需要的条件包括SSH配置和一个执行脚本. 准备 1. ...
- bzoj1190
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1190 神题...... F[i][j]表示容量为j*2^i+W第i-1位到第0位的最大价值, ...
- c指针点滴-指针与类型
#include <stdio.h> #include <stdlib.h> //数据通信 void main() { ; int *p1 = # int *p ...
- 修改过mysql数据库字段内容默认值为当前时间
--添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE `table_name`ADD COLUMN `CreateTime` datetime N ...
- WebService-相关概念介绍
WebService学习总结(二)——WebService相关概念介绍 一.WebService是什么? 1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 2. 一个跨语言.跨 ...
- Android 之 Shape (圆角输入框)
1 简介 本文主要介绍通过 shape 来设置 EditText 的圆角. 2 shape 的设置 shape_life_search.xml 放在 res/drawable 文件夹内 < ...
- 【百度之星2014~初赛(第二轮)解题报告】Chess
声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载.可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...
- top 命令SQLServer-sybase-oracle
SQLServer: select top 10 * from tablename; select top 10 percent from tablename; select * from table ...
- sql 读取excel中的数据
select 列名 as 字段名 from openBowSet('MSDASQL.1','driver=Microsoft Excel Driver(*.xls);dbq=文件存放地址','sele ...
- extjs folder is lost解决方法 和 FineUI主题切换时 iframe内的内容主题不变的解决方法
错误原因:extjs包和FineUI版本不一致 或者是 webconfig配置中 没有设置为任何人可访问 解放方法下载和FineUI版本相同的extjs包就ok了 解决方法:FineUI主题切换时 ...