hdu-3401-Trade-单调队列优化的DP
单调队列入门题。。。
dp[i][j]:第i天。手中拥有j个股票时,获得的最大利润。
若第i天不买不卖:dp[i][j]=max(dp[i][j],dp[i-1][j]);
若第i天买 :dp[i][j]=max(dp[i][j],dp[i-w-1][k]-(j-k)*ap[i]);
若第i天卖 :dp[i][j]=max(dp[i][j],dp[i-w-1][k]+(k-j)*bp[i]);
若仅仅考虑买的情况:
dp[i][j]=dp[i-w-1][k]+ap[i]*k-j*ap[i];
非常明显。能够用单调队列优化dp[i-w-1][k]+ap[i]*k。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
//#define INF ((1<<30)-1)
#define INF 0xfffff
#define maxn 2200
#define LL long long
#define MOD 1000000009
int dp[2200][2200];
struct list
{
int val;
int x;
} p[5001],q;
int ap[maxn],bp[maxn],as[maxn],bs[maxn];
int main()
{
int Ts;
int n,m,w,i,j;
scanf("%d",&Ts);
while(Ts--)
{
scanf("%d%d%d",&n,&m,&w);
for(i=0; i<=n; i++)
for(j=0; j<=m; j++)dp[i][j]=-INF;
int head,tail;
for(i=1;i<=n;i++)scanf("%d%d%d%d",&ap[i],&bp[i],&as[i],&bs[i]);
for(j=1;j<=w+1;j++)
for(i=0;i<=min(as[j],m);i++)
dp[j][i]=-1*ap[j]*i;
for(i=2; i<=n; i++)
{
for(j=0;j<=m;j++)dp[i][j]=max(dp[i-1][j],dp[i][j]);
if(i<=w+1)continue;
head=1;
tail=0;
for(j=0; j<=m; j++)
{
q.x=j;
q.val=dp[i-w-1][j]+ap[i]*j;
while(tail>=head&&q.val>p[tail].val)tail--;
p[++tail]=q;
while(tail>=head&&p[head].x<j-as[i])head++;
if(head<=tail)dp[i][j]=max(dp[i][j],p[head].val-ap[i]*j);
}
head=1;
tail=0;
for(j=m;j>=0;j--)
{
q.x=j;
q.val=dp[i-w-1][j]+bp[i]*j;
while(tail>=head&&q.val>p[tail].val)tail--;
p[++tail]=q;
while(tail>=head&&p[head].x>j+bs[i])head++;
if(head<=tail)dp[i][j]=max(dp[i][j],p[head].val-bp[i]*j);
}
}
int maxx=0;
for(i=0;i<=m;i++)maxx=max(maxx,dp[n][i]);
printf("%d\n",maxx);
}
return 0; }
hdu-3401-Trade-单调队列优化的DP的更多相关文章
- HDU 3401 Trade(单调队列优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401 题意:炒股.第i天买入一股的价钱api,卖出一股的价钱bpi,最多买入asi股,最多卖出bsi股 ...
- 【NOIP2017】跳房子 题解(单调队列优化线性DP)
前言:把鸽了1个月的博客补上 ----------------- 题目链接 题目大意:机器人的灵敏性为$d$.每次可以花费$g$个金币来改造机器人,那么机器人向右跳的范围为$[min(d-g,1),m ...
- 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& ...
- 洛谷p1725 露琪诺 单调队列优化的DP
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int ...
- 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 ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- 单调队列以及单调队列优化DP
单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...
随机推荐
- 经验总结21--抓取WEB数据,汇率,HtmlAgilityPack
网上找了非常多资料,PHP的比較多,然后找到有csv文件的.处理起来非常麻烦,国外的站点速度非常慢. 最后还是去页面上抓取数据,我是从中国银行抓取的,各位可去其它站点抓取. 1.模拟请求URL. st ...
- 自醒的觉悟与力量——leo鉴书59
30岁之后由于看得书多起来,阅读和写作也都有了自己的套路,与此相对的写书评之前须要看几遍书,然后我才干下笔的作者和作品越来越少了. 崔卫平是这种作者,而<正义之前>是我看了两遍才開始写评的 ...
- 【opencv】opencv在vs下的配置(持续更新)
经常使用配置记录,会更新下去. 1.去掉ipch及.sdf文件 opencv在vs编译会得到很多文件.当中.dsf和ipch文件就有几十M.总是非常占空间,而这都是用来保存C++预编译的头文件和Int ...
- hdoj--3440--House Man(差分约束)
House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- ASP.NET Core-组件:目录
ylbtech-ASP.NET Core-组件:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http ...
- ubuntu安装之后root用户配置
安装ubuntu之后发现不切换到root显示:su: Authentication failure 需要进行一下操作 表示成功切换到root用户
- wampserver的安装及使用配置方法
在安装wampserver的过程中,根据本人在安装过程中遇到的问题,在此做个总结,与小伙伴们分享一下下~~~. 1. 何处获得Wamp ★ 在自己的Windows电脑上Web服务器软件 - Wamp. ...
- function——函数声明头的提升和预解析
函数: 即function语句的集合,就是将多个语句封装到一起: 函数的执行要会自己遍历,遇见函数 a():执行语句,就要移交控制权,函数执行完毕之后,控制权又移交回来了! 函数的参数要罗列在func ...
- BroadcastReceiver广播接受者简单使用
1.注册BrocadcastReceiver <receiver android:name=".FirstReceiver" > <!-- 指定能够接收的广播类型 ...
- Hibernate框架学习(七)——多对多关系
一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 在User.hbm.xml中添加: 在Role.hbm.xml中添加(与上相反): 二.操作关联属性 1.保存员工及角色 pu ...