码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 [SCOI2010]股票交易 | 单调性DP

时间:2018-02-23 10:59:18      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:bsp   print   交易   www.   blog   define   href   printf   https   

题目链接

#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 2005
using namespace std;
int n,q[N],ap,bp,dp[N][N],as,bs,m,w;
int main()
{
    scanf("%d%d%d",&n,&m,&w);
    memset(dp,128,sizeof(dp));
    for (int i=1;i<=n;i++)
    {
    scanf("%d%d%d%d",&ap,&bp,&as,&bs);
    for (int j=0;j<=as;j++) dp[i][j]=-1*j*ap;
    for (int j=0;j<=m;j++) dp[i][j]=max(dp[i][j],dp[i-1][j]);
    if (i<=w) continue;
    int l=1,r=0;
    for (int j=0;j<=m;j++)
    {
        while (l<=r && q[l]<j-as) l++;
        while (l<=r && dp[i-w-1][q[r]]+q[r]*ap<=dp[i-w-1][j]+j*ap) r--;
        q[++r]=j;
        if (l<=r) dp[i][j]=max(dp[i][j],dp[i-w-1][q[l]]+q[l]*ap-j*ap);
    }
    l=1,r=0;
    for (int j=m;j>=0;j--)
    {
        while (l<=r && q[l]>j+bs) l++;
        while (l<=r && dp[i-w-1][q[r]]+q[r]*bp<=dp[i-w-1][j]+j*bp) r--;
        q[++r]=j;
        dp[i][j]=max(dp[i][j],dp[i-w-1][q[l]]+q[l]*bp-j*bp);
    }
    }
    printf("%d\n",dp[n][0]);
    return 0;
}

 

洛谷 [SCOI2010]股票交易 | 单调性DP

标签:bsp   print   交易   www.   blog   define   href   printf   https   

原文地址:https://www.cnblogs.com/mrsheep/p/8460739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!