SCOI2010 and SXOI2014 股票交易(DP)
明显的单调队列……
但下面的程序一直有bug
附上题解:http://blog.csdn.net/njlcazl/article/details/8611042
附上我的代码:
var head,tail,i,n,maxp,w,t,ans,j:longint;
as,bs,ap,bp,q,val:array[..] of longint;
f:array[..,..] of longint;
function max(x,y:longint):longint;
begin
if x>y then exit(x) else exit(y);
end;
procedure init;
begin
readln(n,maxp,w);ans:=;
for i:= to n do readln(ap[i],bp[i],as[i],bs[i]);
end;
procedure main;
begin
fillchar(f,sizeof(f),);
f[,]:=;
for i:= to n do
begin
for j:= to as[i] do f[i,j]:=-j*ap[i];
for j:= to as[i] do
f[i,j]:=max(f[i,j],f[i-,j]);
t:=i-w-;
if t>= then
begin
head:=;tail:=;
for j:= to maxp do
begin
while (head<tail) and (q[head]<j-as[i]) do inc(head);
while (head<tail) and (f[t,j]+j*ap[i]>=val[tail-]) do dec(tail);
val[tail]:=f[t,j]+j*ap[i];
q[tail]:=j;inc(tail);
if head<tail then f[i,j]:=max(f[i,j],val[head]-j*ap[i]);
end;
head:=;tail:=;
for j:=maxp downto do
begin
while (head<tail) and (q[head]>j+bs[i]) do inc(head);
while (head<tail) and (f[t,j]+j*bp[i]>=val[tail-]) do dec(tail);
val[tail]:=f[t,j]+j*bp[i];
q[tail]:=j;inc(tail);
if head<tail then f[i,j]:=max(f[i,j],val[head]-j*bp[i]);
end;
end;
ans:=max(ans,f[i,]);
end;
writeln(ans);
end;
begin
init;
main;
end.
还有另一位oier的代码:
type
ji=record
w,s:longint;
end;
var
q:array[..] of ji;
f:array[-..,..] of longint;
x,i,j,k,head,tail,t,maxp,w,api,bpi,asi,bsi:longint; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; begin
readln(t,maxp,w);
for i:=-t to t do
for j:= to maxp do
f[i,j]:=-;
for i:= to t do
begin
readln(api,bpi,asi,bsi);
head:=;
tail:=;
f[i]:=f[i-];
q[].s:=;
q[].w:=f[i-w-,];
for j:= to maxp do
begin
inc(tail);
q[tail].w:=f[i-w-,j]+j*api;
q[tail].s:=j;
while (head<tail)and(q[tail-].w<q[tail].w) do
begin
q[tail-]:=q[tail];
dec(tail);
end;
while (head<=tail)and(q[tail].s<j-asi) do inc(head);
f[i,j]:=max(f[i,j],q[head].w-api*j);
end;
head:=;
tail:=;
q[].s:=maxp;
q[].w:=f[i-w-,maxp]+maxp*bpi;
for j:=maxp- downto do
begin
inc(tail);
q[tail].w:=f[i-w-,j]+j*bpi;
q[tail].s:=j;
while (head<=tail)and(q[tail].w<x) do
begin
q[tail-]:=q[tail];
dec(tail);
end;
while (head<=tail)and(q[head].s>j+bsi) do inc(head);
f[i,j]:=max(f[i,j],q[head].w-j*bpi);
end;
end;
writeln(f[t,]);
end.
这两种代码方法是一样的,但求解的过程不一样,可以挑选自己喜欢的来写。
ps:这两个代码都有bug,在bzoj上都是wa……
SCOI2010 and SXOI2014 股票交易(DP)的更多相关文章
- 【BZOJ1855】[Scoi2010]股票交易 DP+单调队列
[BZOJ1855][Scoi2010]股票交易 Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预 ...
- P2569 [SCOI2010]股票交易 dp 单调队列优化
LINK:股票交易 题目确实不算难 但是坑点挺多 关于初值的处理问题我就wa了两次. 所以来谢罪. 由于在手中的邮票的数量存在限制 且每次买入卖出也有限制. 必然要多开一维来存每天的邮票数量. 那么容 ...
- 1855: [Scoi2010]股票交易[单调队列优化DP]
1855: [Scoi2010]股票交易 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1083 Solved: 519[Submit][Status] ...
- BZOJ 1855: [Scoi2010]股票交易(DP+单调队列)
1855: [Scoi2010]股票交易 Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未 ...
- [SCOI2010]股票交易(单调队列优化dp)
[SCOI2010]股票交易 题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第 ...
- 单调队列优化DP || [SCOI2010]股票交易 || BZOJ 1855 || Luogu P2569
题面:P2569 [SCOI2010]股票交易 题解: F[i][j]表示前i天,目前手中有j股的最大收入Case 1:第i天是第一次购买股票F[i][j]=-j*AP[i]; (1<=j< ...
- 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 ...
- 洛谷P2569 股票交易 [SCOI2010] dp
正解:dp+单调队列优化 解题报告: 先放个传送门鸭qwq umm首先dp转移挺好想的?就买和不买 f[i][j]表示第i天手上有j的股份的最多钱,转移也很好想?就枚举第1天到第i-w-1天枚举买k股 ...
- 2018.09.10 bzoj1855: [Scoi2010]股票交易(单调队列优化dp)
传送门 单调队列优化dp好题. 有一个很明显的状态设置是f[i][j]表示前i天完剩下了j分股票的最优值. 显然f[i][j]可以从f[i-w-1][k]转移过来. 方程很好推啊. 对于j<kj ...
随机推荐
- Pandas之容易让人混淆的行选择和列选择
在刚学Pandas时,行选择和列选择非常容易混淆,在这里进行一下讨论和归纳 本文的数据来源:https://github.com/fivethirtyeight/data/tree/master/fa ...
- 《C和指针》 读书笔记 -- 第13章 高级指针话题
1.函数指针 int (*f)(); int *(*f[])(); 用途: [1]回调函数 e.g. /*在一个单链表中查找指定值*/ Node *search_list(Node *node,voi ...
- .NET基础之迭代器
使用foreach循环是有IEnumerator接口来实现的,IEnumerator即实现了迭代器,在foreach中如何迭代一个集合arrayList呢? 调用arrayLis.GetEnumber ...
- js学习之函数表达式及闭包
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(七) 直接切入主题~ 定义函数的方式有两种: 函数声明 function functio ...
- VB将PDF流写入ACCESS数据库,通过AcroPDF控件读出PDF流之实现
问题描述: 1.把pdf文件写入access2.读出时用AcroPDF控件 问题解答: 使用流对象保存和显示图片与文件打开vb6,新建工程. 添加两个按钮,一个image控件注意:Access中的ph ...
- sequel 连接不上,命令行能连上
Sequel pro won't connect anymore I'm running into some trouble right now. I worked yesterday on my d ...
- pthread_create()之前的属性设置
一.pthread_create()之前的属性设置1.线程属性设置我们用pthread_create函数创建一个线程,在这个线程中,我们使用默认参数,即将该函数的第二个参数设为NULL.的确,对大多数 ...
- hdu 4557 非诚勿扰
水题…… 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include<io ...
- codeforces #310 div1 B
我们考虑n-1座桥每座桥需要的长度在一个区间[L,R]中 之后我们现在有m座桥,每个桥的长度为k 题意就是要求一个匹配方案 显然如果数据范围不大直接KM就可以了 可是20w的数据KM显然要T 所以我们 ...
- SaaS系列介绍之二: SaaS介绍
1 引言 横看成岭侧成峰,远近高低各不同. 不识庐山真面目, 只缘身在此山中. ________苏轼, ...