hdu 3401 單調佇列+DP
http://acm.hdu.edu.cn/showproblem.php?pid=3401
Problem Description
Recently, lxhgww is addicted to stock, he finds some regular patterns after a few days' study.
He forecasts the next T days' stock market. On the i'th day, you can buy one stock with the price APi or sell one stock to get BPi.
There are some other limits, one can buy at most ASi stocks on the i'th day and at most sell BSi stocks.
Two trading days should have a interval of more than W days. That is to say, suppose you traded (any buy or sell stocks is regarded as a trade)on the i'th day, the next trading day must be on the (i+W+1)th day or later.
What's more, one can own no more than MaxP stocks at any time.
Before the first day, lxhgww already has infinitely money but no stocks, of course he wants to earn as much money as possible from the stock market. So the question comes, how much at most can he earn?
He forecasts the next T days' stock market. On the i'th day, you can buy one stock with the price APi or sell one stock to get BPi.
There are some other limits, one can buy at most ASi stocks on the i'th day and at most sell BSi stocks.
Two trading days should have a interval of more than W days. That is to say, suppose you traded (any buy or sell stocks is regarded as a trade)on the i'th day, the next trading day must be on the (i+W+1)th day or later.
What's more, one can own no more than MaxP stocks at any time.
Before the first day, lxhgww already has infinitely money but no stocks, of course he wants to earn as much money as possible from the stock market. So the question comes, how much at most can he earn?
Input
The first line is an integer t, the case number.
The first line of each case are three integers T , MaxP , W .
(0 <= W < T <= 2000, 1 <= MaxP <= 2000) .
The next T lines each has four integers APi,BPi,ASi,BSi( 1<=BPi<=APi<=1000,1<=ASi,BSi<=MaxP), which are mentioned above.
The first line of each case are three integers T , MaxP , W .
(0 <= W < T <= 2000, 1 <= MaxP <= 2000) .
The next T lines each has four integers APi,BPi,ASi,BSi( 1<=BPi<=APi<=1000,1<=ASi,BSi<=MaxP), which are mentioned above.
Output
The most money lxhgww can earn.
Sample Input
1
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
/**
hdu 3401 單調佇列+DP
http://blog.csdn.net/acm_ted/article/details/7909742
*/
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 2005
#define inf 0xfffff
int T,MaxP,w;
int APi[MAX],BPi[MAX],ASi[MAX],BSi[MAX];
int dp[MAX][MAX];
struct node
{
int x;
int p;
}q[2005],temp;
int front,back;
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d%d",&T,&MaxP,&w);
for(int i=1;i<=T;++i)
scanf("%d%d%d%d",APi+i,BPi+i,ASi+i,BSi+i);
for(int i=0;i<=T;i++)
for(int j=0;j<=MaxP;++j)
dp[i][j]=-inf;
for(int i=1;i<=w+1;i++)
for(int j=0;j<=ASi[i];++j)
dp[i][j]=(-APi[i]*j);
for(int i=2;i<=T;i++)
{
for(int j=0;j<=MaxP;j++)
dp[i][j]=max(dp[i][j],dp[i-1][j]);
if(i<=w+1) continue;
//買入
front=back=1;
for(int j=0;j<=MaxP;j++)
{
temp.p=j;
temp.x=dp[i-w-1][j]+APi[i]*j;
while(front<back&&q[back-1].x<temp.x)
back--;
q[back++]=temp;
while(front<back&&q[front].p+ASi[i]<j)
front++;
dp[i][j]=max(dp[i][j],q[front].x-APi[i]*j);
}
front=back=1;
for(int j=MaxP;j>=0;j--)
{
temp.p=j;
temp.x=dp[i-w-1][j]+BPi[i]*j;
while(front<back&&q[back-1].x<temp.x)
back--;
q[back++]=temp;
while(front<back&&q[front].p-BSi[i]>j)
front++;
dp[i][j]=max(dp[i][j],q[front].x-BPi[i]*j);
}
}
int ans=0;
for(int i=0;i<=MaxP;i++)
ans=max(ans,dp[T][i]);
printf("%d\n",ans);
}
return 0;
}
相關文章
- 單調佇列最佳化 DP佇列
- [學習筆記] 單調佇列最佳化DP - DP筆記佇列
- 單調佇列佇列
- BZOJ1044: [HAOI2008]木棍分割(dp 單調佇列)佇列
- 單調棧/單調佇列佇列
- 單調佇列雙端佇列佇列
- 單調棧 和 單調佇列佇列
- 單調棧和單調佇列佇列
- 聯賽模擬測試18 A. 施工 單調佇列(棧)優化DP佇列優化
- 單調佇列優化dp(五)——#10179. 「一本通 5.5 例 5」Banknotes佇列優化
- hdu 2111 Saving HDU (DP)
- 佇列-單端佇列佇列
- hdu 6415 - DP
- 洛谷P4544 [USACO10NOV] Buying Feed G 題解 單調佇列最佳化DP佇列
- HDU6415(DP)
- HDU1024(dp)
- noi.ac #289. 電梯(單調佇列)佇列
- 決策單調性DP
- HDU 6415 (計數dp)
- 多重揹包問題的單調佇列優化佇列優化
- HDU 6415 Rikka with Nash Equilibrium (DP)UI
- HDU6415:Rikka with Nash Equilibrium(dp)UI
- HDU 6035 Colorful Tree(樹形DP)
- HDU 1074 Doing Homework(狀壓DP)
- RabbitMQ-簡單佇列MQ佇列
- 單向鏈式佇列佇列
- 棧,佇列,優先順序佇列簡單介面使用佇列
- 決策單調性最佳化DP
- HDU 6415(dp/記憶化搜尋)
- HDU4652 Dice(期望dp推式子)
- python中佇列簡單使用Python佇列
- 佇列_單向連結串列佇列
- laravel 佇列的簡單使用Laravel佇列
- 實現簡單延遲佇列和分散式延遲佇列佇列分散式
- 佇列、阻塞佇列佇列
- AO3401A-ASEMI中低壓P溝道MOS管AO3401A
- kuangbin 專題二十三:二分 尺取 單調棧佇列 String佇列
- HDU多校第九次 6415 (dp
- 佇列 和 迴圈佇列佇列