这题、只要找到了突破口就好做了

首先最好想的是n^3的dp、f【i】【j】表示在第i天有j张票的最大收益、枚举卖出和买入的个数即可

但我们需要一个n^2的做法

所以我们就可以分析题目的特点:

这个题有一个前w天的限制,但w=0时它又与普通dp无异,所以不是突破口,它只是刷一下存在感

然后对于每一天都有收益,,如果把他想成限制,那他就比所有的天都一样要麻烦;

但如果把他想成放宽,则他这一天里,每一张的买入和卖出是一样的

所以我们考虑如何用一天内相同量来简化决策

对于两个可取的决策:  f[j]+(j-i)*v   和  f[k]+(k-i)*v

如果i+1,即到了多一张票数:

f[j]+(j-i-1)*v   &   f[k]+(k-i-1)*v

他们都只多出了一个1*v

所以这一种票数的决策其实可以沿用上一张票数的情况

所以我们加入合法的、退出不合法的

新加入的比以前加入的晚被弹出

每加入一个新节点就可以删除旧节点

就是单调队列了

码(单调队列不熟、写的极其难看):

#include<iostream>
#include<cstdio>
using namespace std;
int n,sx,w,i,j,f[2002][2002],g1[2002],g2[2002],ans,c,v,sc,sv;
int main()
{
scanf("%d%d%d",&n,&sx,&w);
w++;
for(i=1;i<=sx;i++)
f[0][i]=-1000000009;
for(i=1;i<=n;i++)
{
scanf("%d%d%d%d",&c,&v,&sc,&sv);
for(j=0;j<=sx;j++)
f[i][j]=f[i-1][j];//继承相当于放弃这一天的买卖机会
int z1=1,z2=1,z3=1,z4=1;
g1[1]=1;
int qi=2;
g2[1]=0;for(j=0;j<=sx;j++){//卖的出队if(g1[z1]<=j)++z1;//卖的比之后的相等、小就被迫出队 for(;qi<=min(j+sv,sx);qi++)//卖的 加入队列
{ while(z1<=z2&&(f[max(i-w,0)][g1[z2]]+(g1[z2]-j)*v<f[max(i-w,0)][qi]+(qi-j)*v))--z2;g1[++z2]=qi;
}if(j!=sx)f[i][j]=max(f[i][j],f[max(i-w,0)][g1[z1]]+(g1[z1]-j)*v);if(j!=0){if(g2[z3]<j-sc)++z3;//买的出队 if(j!=1){while(z3<=z4&&f[max(i-w,0)][g2[z4]]-(j-g2[z4])*c<f[max(i-w,0)][j-1]-c )z4--;//买的入队 g2[++z4]=j-1;}f[i][j]=max(f[i][j],f[max(i-w,0)][g2[z3]]-(j-g2[z3])*c);}  // cout<<f[i][j]<<" ";}// cout<<endl;
}
for(i=0;i<=sx;i++)
ans=max(ans,f[n][i]);
printf("%d",ans);
}

2017.9.9 股票交易 思考记录相关推荐

  1. 2017.9.5 组合数学 思考记录

    这题风格很正统.所以我感觉如果自己能不靠题解把这个题做出来,那应该就学得不错了.. 于是在历尽千辛万苦之后,终于1A了.(事后证明 结论题的结论强行无视 乱搞也是有可能AC的) xym&ISA ...

  2. 2017.9.4 Nim 思考记录

    只要知道nim的结论   这题就是链剖板子题.1A 注意bzoj 的  换行符是     \r!!      \r!!      \r!! 就说一下链剖的易错点吧: 1.记录父节点.sz.深度 2.当 ...

  3. 2017.10.28 排序 思考记录

    这个题有一种套路,就是大小关系转化成01串,这样就变成了二分检验问题,, 就是把排序变成区间修改,然后单点查询.. 把所有比他小的赋成0,比他大的赋成1 然后判断要求位是0还是1来判断答案与当前值的大 ...

  4. 2017.10.28 压缩 思考记录

    这个题首先要知道M和R不是栈的搭配,是贪心的搭配,,就是向左找到第一个M.. 如 abababab cdcdcdcd abababab cdcdcdcd   = abRRcdcdcdcdR != Ma ...

  5. 2017.10.6 单词 思考记录

    少有的会做的ac自动机题 .这个题是匹配模式串. 所以就不需要匹配的过程,只需要建出fail树,然后直接拓扑 由于每次加进去一个单词,这个单词的每一个字母都有可能作为最后一个字母影响他的失配,所以词路 ...

  6. 2017.10.5 高速公路 思考记录

    ..一开始死活不知道样例8/3是怎么算出来的.. 后来才发现右端点要-1.. 这个题说是期望,但因为每个点的概率相同,所以直接求和然后除就可以了 维护每个区间的答案,听说直接维护答案很难写,,感觉还可 ...

  7. 2017.10.1 蚯蚓 思考记录

    现在看来这个题真心不难. 如果能保证一个从大到小的顺序的话,对所有的数依次进行相同比例的分裂操作,左右两边一定也是单调的 由于每次要+q,等价于取出元素-q,这在式子里是不影响大小关系的 所以就sor ...

  8. 2017.9.28 产品加工 思考记录

    很早之前做的了.发现bzoj上竟然没提交过 于是又重推了一遍 首先这个ti<=5是用来让n^2的复杂度降一降的, 然后就考虑装每个物品之后各个机器的耗时,同时,对于一个A机器的耗时,可能会有多个 ...

  9. 2017.9.28 降雨量 思考记录

    论逻辑清晰的重要性. 首先大小的关系明摆着是要你建一颗线段树 然后就可以分类讨论了 x没有 y有 x有 y没有 x没有 y没有 x有 y有 对于都没有的情况  只可能是maybe 对于一个没有的情况, ...

最新文章

  1. 一文看懂国产最大深度学习平台上新,国内率先加持量子机器学习
  2. 去除0值和nan_Pandas 1.0的新功能
  3. 常用start_Excel VBA 基础(02.7) - 常用函数 第二部分
  4. matlab找距离最近的元素,如何用MATLAB找到给定坐标的最近点?
  5. 拼多多开始卖车了!3.49万秒杀五菱宏光...
  6. 计算机减法英语,英语的加减乘除如何表达?
  7. ubuntu 字符集与乱码
  8. python取整数部分语句_pythonlogi中不使用条件语句的整数取整
  9. 峰度和偏度在金融数据分析中有何应用_做数据分析,为什么要学统计学?
  10. 【仿真】Proteus8.9 下载与安装教程(超详细)
  11. 机器学习实战(SVM)
  12. C要点5:float、double、long double(大小,范围,输入输出符,科学计数法)
  13. python:算术平方根的实现
  14. 机器学习方法之非线性回归( Logistic Regression)
  15. 沧海桑田:Linux 系统启动的演进模型与发展变化
  16. python客户端软件开发_妙小程python客户端
  17. 解决谷歌浏览器打开后是毒霸浏览器的问题
  18. leetcode75 颜色分类
  19. 无盘服务器 主板,服务器主板 无盘专用
  20. go语言安装插件报错cannot find package golang.org/x/tools/go/buildutil

热门文章

  1. 2021-11-01 Excel之九九乘法表
  2. 根据企业财务进行风险分析——基于pytorch
  3. 不改变分辨率转换PDF为png图片的方法汇总
  4. Maven将jar包install到本地仓库deploy到远程仓库命令
  5. 微信开发---微信网页授权、JS-SDK和微信公众号的基本设置
  6. 全选 单选和反选的实现
  7. mysql 吧库下的表名都加_MySQL 数据库名、表名、字段名大小写敏感记录
  8. 链路两段不同网段怎么通信_交换机互联不同vlan及不同网段通信问题总结
  9. python 之禅_Python 之禅
  10. php pdo 新建数据库,php – 使用PDO数据库类而不是每次都创建新...