HDU 3401 Trade (单调队列优化DP)-程序员宅基地

技术标签: php  

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401

题意:炒股。第i天买入一股的价钱api,卖出一股的价钱bpi,最多买入asi股,最多卖出bsi股。两次操作(买入或卖出)中间必须相差W天。炒股时间为n。任意时间手中的股票不大于MaxP。求最大收益。

思路:设dp[i][j]表示到第i天手中持有j股的最大收益,那么有dp[i][j]=max(dp[i-1][j],dp[r][k]+(j-k)*ap[i],dp[r][k]+(k-j)*bp[i])。其中r<=i-W,j-k<=asi,k-j<=bsi。由于dp[i][j]至少为dp[i-1][j],因此上式可简化为dp[i][j]=max(dp[i-1][j],dp[i-W][k]+(j-k)*ap[i],dp[i-W][k]+(k-j)*bp[i])。而dp[i-W][k]+(j-k)*ap[i]=dp[i-W][k]+k*ap[i]-j*ap[i],dp[i-W][k]+(k-j)*bp[i]=dp[i-W][k]+k*bp[i]-j*bp[i]。可用单调队列优化。

int n,MaxP,W;
int ap[N],bp[N],as[N],bs[N];
int dp[N][N];
pair<int,int> a[N];

int cal()
{
    int i,j;
    for(i=1;i<=n;i++) for(j=0;j<=MaxP;j++) dp[i][j]=-INF;
    for(i=1;i<=W;i++) for(j=0;j<=as[i];j++) dp[i][j]=-j*ap[i];
    for(i=2;i<=n;i++)
    {
        if(i<=W)
        {
            for(j=0;j<=MaxP;j++) upMax(dp[i][j],dp[i-1][j]);
            continue;
        }
        int head=0,tail=0;
        for(j=0;j<=MaxP;j++)
        {
            upMax(dp[i][j],dp[i-1][j]);
            pair<int,int> p=MP(j,dp[i-W][j]+j*ap[i]);
            while(head<tail && a[tail-1].second<=p.second) tail--;
            a[tail++]=p;
            while(head<tail && j-a[head].first>as[i]) head++;
            upMax(dp[i][j],a[head].second-j*ap[i]);
        }
        head=0,tail=0;
        for(j=MaxP;j>=0;j--)
        {
            pair<int,int> p=MP(j,dp[i-W][j]+j*bp[i]);
            while(head<tail && a[tail-1].second<=p.second) tail--;
            a[tail++]=p;
            while(head<tail && a[head].first-j>bs[i]) head++;
            upMax(dp[i][j],a[head].second-j*bp[i]);
        }
    }
    int ans=0;
    for(i=0;i<=MaxP;i++) upMax(ans,dp[n][i]);
    return ans;
}

int main()
{
    rush()
    {
        RD(n,MaxP,W); W++;
        int i;
        FOR1(i,n) RD(ap[i],bp[i]),RD(as[i],bs[i]);
        PR(cal());
    }
}

  

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33694620/article/details/86059845

智能推荐

C语言/C++常见习题问答集锦(三十二)之六种图案的字母金字塔_c++字母金字塔-程序员宅基地

文章浏览阅读5.7k次,点赞20次,收藏114次。字母金字塔图案1、A BBB CCCCC DDDDDDD图案2、A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9图案3、A ABA ABCBA ABCDCBA图案4、A BB CCC DDDD EEEEE FFFFFF图案5、A BAB CBABC DCBABCD EDCBABCDE空心字母金字图案6、A B B C C D D EEEEEEEEE_c++字母金字塔

如何点击IE窗口上方的“X关闭符号”,弹出提示窗口呢? -程序员宅基地

文章浏览阅读972次。url:http://www.cnblogs.com/zhangzs8896/archive/2005/12/17/298899.html New Document function test() { return ""; } onbeforeunload="return test();"> _关闭符号

天坑的:Fatal Python error: init_sys_streams: can‘t initialize sys standard streams解决方案_fatal python error: init_sys_streams: can't initia-程序员宅基地

文章浏览阅读1.6w次,点赞7次,收藏18次。【问题描述】今天用pycharm新建工程突然提示:编译环境有问题,简单写了两行代码测试一直有问题, 报错如下:Fatal Python error: init_sys_streams: can’t initialize sys standard streams【原因分析】找了很多解决方案,结合错误提示,还是问题发生在虚拟环境下lib目录中的io.py身上,网上有好多老铁说改文件名字,然而证明并没有什么用,认真看下文件信息和内容发现并无区别,最后突然发现io.py的生成日期不对,恒新鲜,不是新建环境_fatal python error: init_sys_streams: can't initialize sys standard streams

7-4 稀疏矩阵加法 (20 分) pta_稀疏矩阵加法pta-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏2次。7-4稀疏矩阵加法(20分)给定两个矩阵A和B,求其和矩阵C=A+B。输入格式:第一行包含两个数Row和Col,分别表示矩阵的行数和列数,A和B的维度是一致的。第二行只有一个数N​1​​,表示接下来要输入的A中的非零元素的个数。接下来是N​1​​行,每一行都是ijA[i,j]这样的形式,表示的A中第i行第j列的元素A[i,j],为了与大多数编程语言保持一致,它..._稀疏矩阵加法pta

【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )_dex加密-程序员宅基地

文章浏览阅读1.9k次。一、解压 apk 文件、二、加密生成 dex 文件、三、打包未签名 apk 文件、四、完整代码示例、五、文件解压缩相关代码、六、执行结果_dex加密

kafka数据不丢失不重复_Kafka 之 如何保证数据不丢失?不重复?-程序员宅基地

文章浏览阅读217次。数据不丢失1)从生产端:acks = -1,(ack应答机制)从生产端到节点端,当所有isr集合里的节点备份完毕后返回成功;2)从节点端:每个partition至少需要一个isr节点(同步)存活保证数据安全3)从消费端:关闭自动提交,使用手动提交。数据不重复消费1)生产端生产者幂等性实现:PID和Sequence Number为了实现Producer的幂等性,Kafka引入了Producer ID..._kafka保证 不重复的pid

随便推点

MySQL和hive建表区别,Hive中創建表(hive的使用和MySQL的使用很相似)-程序员宅基地

文章浏览阅读262次。CREATE TABLE語句(不區分大小寫)Create Table是用於在Hive中創建表的語句,語法和示例如下:語法:CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name[(col_name data_type [COMMENT col_comment], ...)][COMMENT table_co..._hive create table stored as mysql

解决php因内存不足httpd.exe错误方法!_httpd.exe重启不起来-程序员宅基地

文章浏览阅读246次。1,修改 php.ini将memory_limit由 8M 改成 16M(或更大),重启apache服务2,在PHP 文件中 加入 ini_set(”memory_limit”,”100M”);注意:为了系统的其它资源的正常使用 请您不要将 memory_limit设置太大,其中-1为不限3,修改.htaccess 文档(前提是该目录支持.htaccess)在文档中新增一句:p_httpd.exe重启不起来

分布式系统设计_分布式系统的设计审查清单-程序员宅基地

文章浏览阅读201次。分布式系统设计This article was originally published on my website — https://kislayverma.com/programming/design-review-checklist-for-distributed-systems/ 本文最初发布在我的网站上-https: //kislayverma.com/programming/desi...

数字图像处理-几何变换_冈萨雷斯 图像几何变换在第几章呢-程序员宅基地

文章浏览阅读2.4k次。本程序实现图像处理图像几何变换,基本原理参考冈萨雷斯《数字图像处理》(第二版)第五章中第十一小节。程序需要先调用cal_coef函数计算出来系数,然后调用Image_TransAffine函数得到几何变换后的图像。////////////////////////////////////////////////////////////////////////////函数名称:cal_coef//传入_冈萨雷斯 图像几何变换在第几章呢

IP-Guard如何清除安全密码?_agt3tool-程序员宅基地

文章浏览阅读972次。1、在开始->运行中,输入命令agt3tool ocularadv,调出客户端工具;如果是win7以上的电脑,需要在目录C:\Windows中,找到客户端工具Agt3Tool.exe,右键以管理员身份运行。2、在客户端工具界面上勾选“清除加密安全密码”,并生成操作码;3、在控制台上,工具 → 客户端工具 → 确认码计算器,将客户端上生成的操作码在此输入,进行解析;4、解析完成后会生成操作码,将操作码导入至客户端即可执行清除动作。..._agt3tool

iOS使用Charles(青花瓷)抓包并篡改请求头的数据_charles的请求头-程序员宅基地

文章浏览阅读2.7k次。第一步:编辑要修改的头部信息如图所示第二步:修改完重新执行接口如图所示_charles的请求头

推荐文章

热门文章

相关标签