Description

最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi,第i天的股票卖出价为每股BPi(数据保证对于每个i,都有APi>=BPi),但是每天不能无限制地交易,于是股票交易所规定第i天的一次买入至多只能购买ASi股,一次卖出至多只能卖出BSi股。 另外,股票交易所还制定了两个规定。为了避免大家疯狂交易,股票交易所规定在两次交易(某一天的买入或者卖出均算是一次交易)之间,至少要间隔W天,也就是说如果在第i天发生了交易,那么从第i+1天到第i+W天,均不能发生交易。同时,为了避免垄断,股票交易所还规定在任何时间,一个人的手里的股票数不能超过MaxP。 在第1天之前,lxhgww手里有一大笔钱(可以认为钱的数目无限),但是没有任何股票,当然,T天以后,lxhgww想要赚到最多的钱,聪明的程序员们,你们能帮助他吗?

Input

输入数据第一行包括3个整数,分别是T,MaxP,W。 接下来T行,第i行代表第i-1天的股票走势,每行4个整数,分别表示APi,BPi,ASi,BSi。

Output

输出数据为一行,包括1个数字,表示lxhgww能赚到的最多的钱数。

Sample Input

5 2 0
2 1 1 1
2 1 1 1
3 2 1 1
4 3 1 1
5 4 1 1

Sample Output

3

HINT

对于30%的数据,0 < =W 对于50%的数据,0 < =W 对于100%的数据,0 < =W 
对于所有的数据,1 < =BPi < =APi < =1000,1 < =ASi,BSi < =MaxP

Source

Day1

这个按lst大佬的话来讲好像叫未来收益型Dp?

跟杭二联考的时候做过一个叫分组的题,暴力的做法跟这个题比较像,不再赘述。

首先设f[i][j]表示到了第i天,有j支股票,收益的最大值(这个收益是算了买股票的代价的)

暴力的转移:

复杂度为O(n*MaxP*MaxP),而且这个东西看起来貌似不太好优化。。

把第二和第三个方程转化一下:

然后再整理一下:

发现转移的前面一项是之和k有关的,我们要求的就是前面一项的最大值。

这个我们可以通过把前一项压进单调队列中,维护单调递减的单调队列即可,复杂度为O(n*MaxP)。。

// MADE BY QT666
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
const int N=100050;
int f[3000][3000],ap[N],bp[N],as[N],bs[N],W,T,MaxP,q[N];
int main(){
scanf("%d%d%d",&T,&MaxP,&W);
for(int i=1;i<=T;i++) scanf("%d%d%d%d",&ap[i],&bp[i],&as[i],&bs[i]);
memset(f,-127/3,sizeof(f));int Inf=f[0][0];f[0][0]=0;
for(int i=1;i<=T;i++){
for(int j=0;j<=MaxP;j++) f[i][j]=max(f[i][j],f[i-1][j]);
/*for(int k=max(j-as[i],0);k<=j;k++){
if(f[max(0,i-W-1)][k]==Inf) continue;
f[i][j]=max(f[i][j],f[max(0,i-W-1)][k]-ap[i]*(j-k));
}
for(int k=j;k<=min(j+bs[i],MaxP);k++){
if(f[max(0,i-W-1)][k]==Inf) continue;
f[i][j]=max(f[i][j],f[max(0,i-W-1)][k]+bp[i]*(k-j));
}*/
int head=1,tail=0;q[++tail]=0;
for(int j=0;j<=MaxP;j++){
while(head<=tail&&q[head]<max(j-as[i],0)) head++;
f[i][j]=max(f[i][j],f[max(0,i-W-1)][q[head]]-ap[i]*(j-q[head]));
while(head<=tail&&f[max(0,i-W-1)][j]+ap[i]*j>f[max(0,i-W-1)][q[tail]]+ap[i]*q[tail]) tail--;
q[++tail]=j;
}
head=1,tail=0;q[++tail]=MaxP;
for(int j=MaxP;j>=0;j--){
while(head<=tail&&q[head]>min(MaxP,j+bs[i])) head++;
f[i][j]=max(f[i][j],f[max(0,i-W-1)][q[head]]+bp[i]*(q[head]-j));
while(head<=tail&&f[max(0,i-W-1)][j]+bp[i]*j>f[max(0,i-W-1)][q[tail]]+bp[i]*q[tail]) tail--;
q[++tail]=j;
}
}
int ans=Inf;
for(int j=0;j<=MaxP;j++) ans=max(ans,f[T][j]);
printf("%d\n",ans);
return 0;
}

bzoj 1855: [Scoi2010]股票交易的更多相关文章

  1. ●BZOJ 1855 [Scoi2010]股票交易

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1855 题解: DP,单调队列优化.(好久没做 DP题,居然还意外地想出来了) 定义 dp[i ...

  2. BZOJ 1855 [Scoi2010]股票交易 ——动态规划

    DP方程是比较简单的,主要有三种:什么都不做.买入.卖出. 发现买入卖出都是$\Theta (n^3)$但是转移方程都是线性的,而且决策和当前的情况是分开的. 所以可以单调队列优化. 复杂度$\The ...

  3. 1855: [Scoi2010]股票交易[单调队列优化DP]

    1855: [Scoi2010]股票交易 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1083  Solved: 519[Submit][Status] ...

  4. BZOJ 1855: [Scoi2010]股票交易(DP+单调队列)

    1855: [Scoi2010]股票交易 Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未 ...

  5. 单调队列优化DP || [SCOI2010]股票交易 || BZOJ 1855 || Luogu P2569

    题面:P2569 [SCOI2010]股票交易 题解: F[i][j]表示前i天,目前手中有j股的最大收入Case 1:第i天是第一次购买股票F[i][j]=-j*AP[i]; (1<=j< ...

  6. [BZOJ 1855] 股票交易

    Link: BZOJ 1855 传送门 Solution: 比较明显的$dp$模型 令$dp[i][j]$为第$i$天持有$j$支股票时的最大利润 对其购买股票和售出股票分别$dp$,这里以购买为例: ...

  7. 【BZOJ1855】[Scoi2010]股票交易 DP+单调队列

    [BZOJ1855][Scoi2010]股票交易 Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预 ...

  8. 洛谷P2569 [SCOI2010]股票交易

    P2569 [SCOI2010]股票交易 题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股 ...

  9. [luogu] P2569 [SCOI2010]股票交易 (单调队列优化)

    P2569 [SCOI2010]股票交易 题目描述 最近 \(\text{lxhgww}\) 又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,\(\te ...

随机推荐

  1. npm模块管理器入门

    什么是 NPM npm 是 Node 官方提供的包管理工具,他已经成了 Node 包的标准发布平台,用于 Node 包的发布.传播.依赖控制.npm 提供了命令行工具,使你可以方便地下载.安装.升级. ...

  2. jQuery与别的js框架冲突

    jQuery.noConflict()运行这个函数将变量$的控制权让渡给第一个实现它的那个库. 这有助于确保jQuery不会与其他库的$对象发生冲突. <script type="te ...

  3. CORS(跨站资源共享)介绍

    起因 有同学在nginx站点配置中加了一行Access-Control-Allow-Origin *,导致微信中业务数据异常,抓包看http头有两个Access-Control-Allow-Origi ...

  4. 初学PHP心得(第一天)

    我是PHP初学者,听说女生挺适合学这门语言的.所以,我就下定决心,来好好的探究下它,希望它能成为我开启IT道路的第一道关卡. 今天心血来潮,来记录下一天的成果和收获吧.既然想法有了,那就要去实现它.于 ...

  5. 前端测试框架Jest系列教程 -- 简介

    写在前面: 随着互联网日新月异的发展,用户对于页面的美观度,流畅度以及各方面的体验有了更高的要求,我们的网页不再是简单的承载文字,图片等简单的信息传递给用户,我们需要的是更加美观的页面展示,更快的浏览 ...

  6. [WPF]本地化入门

    1. 前言 WPF的本地化是个很常见的功能,我做过的WPF程序大部分都实现了本地化(不管最终有没有用到).通常本地化有以下几点需求: 在程序启动时根据CultureInfo.CurrentUICult ...

  7. nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37

    一:开始Nginx的SSL模块 1.1 Nginx如果未开启SSL模块,配置Https时提示错误 1 nginx: [emerg] the "ssl" parameter requ ...

  8. linux 下配置静态IP

    设置静态网络如下[root@bogon network-scripts]# pwd 进入这个路径下 /etc/sysconfig/network-scripts [root@bogon network ...

  9. C#自定义ip控件

    前言:由于项目中有ip输入,但C#中又没有IP控件,如果直接放4个TextBox感觉又怎么好,还不好控制,于是可以通过自定义控件的方式来解决,就又了下面的自定义ip控件,该控件功能基本完善,如果还有未 ...

  10. python :ascii codec can't decode byte 0xe8 in posit

    python代码: slide.setAttribute("SlideName", module.slide_name)  slide.setAttribute("Sli ...