传送门

$f[i][j]$ 表示第i天,手中股票数为j的最优解

初始化 $f[i][0]=0$ $0<=i<=n$

4种方式转移

  1. 以前没买过,第i天凭空买 $f[i][j]=-j*ap$
  2. 第i天什么都不干 $f[i][j]=f[i-1][j]$
  3. 第i天买 $f[i][j]=f[i-w-1][k]-(j-k)*as=f[i-w-1][k]+k*as-j*as$
  4. 第i天卖 $f[i][j]=f[i-w-1][k]+(k-j)*bs=f[i-w-1][k]+k*bs-j*bs$

可以将 $f[i-w-1][k]+k*as$ 和 $f[i-w-1][k]+k*bs$ 放到单调队列中

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #define N 3001
  5.  
  6. using namespace std;
  7.  
  8. int n, m, w, ap, bp, as, bs, t, h, ans;
  9. int f[N][N], q[N];
  10.  
  11. inline int read()
  12. {
  13. int x = 0, f = 1;
  14. char ch = getchar();
  15. for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
  16. for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
  17. return x * f;
  18. }
  19.  
  20. int main()
  21. {
  22. int i, j;
  23. n = read();
  24. m = read();
  25. w = read();
  26. memset(f, -127, sizeof(f));
  27. for(i = 0; i <= n; i++) f[i][0] = 0;
  28. for(i = 1; i <= n; i++)
  29. {
  30. ap = read();
  31. bp = read();
  32. as = read();
  33. bs = read();
  34. for(j = 1; j <= as; j++) f[i][j] = -ap * j;
  35. for(j = 0; j <= m; j++) f[i][j] = max(f[i][j], f[i - 1][j]);
  36. if(i - w - 1 >= 0)
  37. {
  38. h = 1, t = 0;
  39. for(j = 0; j <= m; j++)
  40. {
  41. while(h <= t && f[i - w - 1][q[t]] + q[t] * ap < f[i - w - 1][j] + j * ap) t--;
  42. q[++t] = j;
  43. while(h <= t && q[h] < j - as) h++;
  44. f[i][j] = max(f[i][j], f[i - w - 1][q[h]] + q[h] * ap - j * ap);
  45. }
  46. h = 1, t = 0;
  47. for(j = m; j >= 0; j--)
  48. {
  49. while(h <= t && f[i - w - 1][q[t]] + q[t] * bp < f[i - w - 1][j] + j * bp) t--;
  50. q[++t] = j;
  51. while(h <= t && q[h] > j + bs) h++;
  52. f[i][j] = max(f[i][j], f[i - w - 1][q[h]] + q[h] * bp - j * bp);
  53. }
  54. }
  55. }
  56. for(i = 0; i <= m; i++) ans = max(ans, f[n][i]);
  57. printf("%d\n", ans);
  58. return 0;
  59. }

  

[luoguP2569] [SCOI2010]股票交易(DP + 单调队列)的更多相关文章

  1. 【BZOJ1855】[Scoi2010]股票交易 DP+单调队列

    [BZOJ1855][Scoi2010]股票交易 Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预 ...

  2. P2569 [SCOI2010]股票交易 dp 单调队列优化

    LINK:股票交易 题目确实不算难 但是坑点挺多 关于初值的处理问题我就wa了两次. 所以来谢罪. 由于在手中的邮票的数量存在限制 且每次买入卖出也有限制. 必然要多开一维来存每天的邮票数量. 那么容 ...

  3. 2018.09.10 bzoj1855: [Scoi2010]股票交易(单调队列优化dp)

    传送门 单调队列优化dp好题. 有一个很明显的状态设置是f[i][j]表示前i天完剩下了j分股票的最优值. 显然f[i][j]可以从f[i-w-1][k]转移过来. 方程很好推啊. 对于j<kj ...

  4. [SCOI2010] 股票交易 (单调队列优化dp)

    题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi, ...

  5. 洛谷P2569 (BZOJ1855)[SCOI2010]股票交易 【单调队列优化DP】

    Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价 ...

  6. [SCOI2010]股票交易(单调队列优化dp)

    [SCOI2010]股票交易 题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第 ...

  7. BZOJ1855 [Scoi2010]股票交易 【单调队列优化dp】

    题目链接 BZOJ1855 题解 设\(f[i][j]\)表示第\(i\)天结束时拥有\(j\)张股票时的最大收益 若\(i \le W\),显然在这之前不可能有交易 \[f[i][j] = max\ ...

  8. 洛谷P2569 [SCOI2010]股票交易(单调队列)

    传送门 惭愧……这种题目都没看出来…… 首先,我们用$dp[i][j]$表示在第$i$天,手上有$j$股时的最大收益 第一,我们可以直接买股票,即$dp[i][j]=-j*AP_i$,这个直接计算即可 ...

  9. [luogu] P2569 [SCOI2010]股票交易 (单调队列优化)

    P2569 [SCOI2010]股票交易 题目描述 最近 \(\text{lxhgww}\) 又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,\(\te ...

  10. [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)

    DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...

随机推荐

  1. VA助手添加扩展文件后缀名

    Allow C/C++ files with a non-standard extension Follow these steps to make Visual Assist consider as ...

  2. Sublime +Markdown+OmniMarkupPreviewer 搭建实时预览的markdown编辑器

    浏览器实时预览 <meta http-equiv="refresh" content="0.1"> auto save 的配置 {"aut ...

  3. Vue 后台管理

    这里是结合vue和element快速成型的一个demo 里面展示了基本的后台管理界面的大体结构和element的基本操作 GitHub的地址:https://github.com/wwwming/ad ...

  4. C#数组添加元素

    一.向数组添加元素 在C#中,只能在动态数组ArrayList类中向数组添加元素.因为动态数组是一个可以改变数组长度和元素个数的数据类型. 示例: using System;using System. ...

  5. iOS 导航栏遮挡问题 --- iOS开发系列 ---项目中成长的知识七

    不知大家有没有遇见过自己写的tableview被导航栏遮挡住的问题,反正我是遇见过! 因为在ios7以后所有的UIViewController创建后默认就是full Screen的,因此如果带导航栏的 ...

  6. on() 和 click() 的区别

    on() 和 click() 的区别: 二者在绑定静态控件时没有区别,但是如果面对动态产生的控件,只有 on() 能成功的绑定到动态控件中. 以下实例中原先的 HTML 元素点击其身后的 Delete ...

  7. css文件和js文件后面带一个问号----2015-1103

    经常看一些网站页面源代码中的css文件和js文件后面带一个问号,后面跟着一连串数字或字符,这是干什么用的? 这个方法我也用过,而且很好用?,它的作用有两个:1.作为版本号,让自己方便记忆.查找:2.作 ...

  8. 66. Plus One@python

    Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The ...

  9. linux文件属性文文件类型知识

    文件类型分别介绍: 1.普通文件:我们通过用ls  -l来查看xxx.sql的属性,可以看到第一列内容为-rw-r--r--,值得注意的是第一个符号是-(英文字符减号),在Linux中,以这样的字符开 ...

  10. java服务器备份(复制)

    public ResponseResult serverBackup (String[] datypeid)throws IOException{ ResponseResult rr = new Re ...