传送门

$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$ 放到单调队列中

#include <cstdio>
#include <cstring>
#include <iostream>
#define N 3001 using namespace std; int n, m, w, ap, bp, as, bs, t, h, ans;
int f[N][N], q[N]; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} int main()
{
int i, j;
n = read();
m = read();
w = read();
memset(f, -127, sizeof(f));
for(i = 0; i <= n; i++) f[i][0] = 0;
for(i = 1; i <= n; i++)
{
ap = read();
bp = read();
as = read();
bs = read();
for(j = 1; j <= as; j++) f[i][j] = -ap * j;
for(j = 0; j <= m; j++) f[i][j] = max(f[i][j], f[i - 1][j]);
if(i - w - 1 >= 0)
{
h = 1, t = 0;
for(j = 0; j <= m; j++)
{
while(h <= t && f[i - w - 1][q[t]] + q[t] * ap < f[i - w - 1][j] + j * ap) t--;
q[++t] = j;
while(h <= t && q[h] < j - as) h++;
f[i][j] = max(f[i][j], f[i - w - 1][q[h]] + q[h] * ap - j * ap);
}
h = 1, t = 0;
for(j = m; j >= 0; j--)
{
while(h <= t && f[i - w - 1][q[t]] + q[t] * bp < f[i - w - 1][j] + j * bp) t--;
q[++t] = j;
while(h <= t && q[h] > j + bs) h++;
f[i][j] = max(f[i][j], f[i - w - 1][q[h]] + q[h] * bp - j * bp);
}
}
}
for(i = 0; i <= m; i++) ans = max(ans, f[n][i]);
printf("%d\n", ans);
return 0;
}

  

最新文章

  1. GOLDENGATE 配置文档,各类参数--转发
  2. 黑马程序员_ C语言基础(二)
  3. 安卓奇葩问题之.so库加载不了
  4. JS通过getBoundingClientRect获取的height可能与css设置的height不一致
  5. BZOJ 2716 [Violet 3]天使玩偶 ——KD-Tree
  6. RTMP协议
  7. python 赋值,交换值理解
  8. Yii2的相关学习记录,自定义gii模板和引用vendor中的js、css(四)
  9. 最简单的ASP动态页面生成伪静态方法
  10. 201521123106《java程序设计》第四周学习总结
  11. SQL FIRST() 函数
  12. 以最简单的方式讲HashMap
  13. Python——字典操作
  14. linux系统 之 curl命令
  15. C语言判断大小端的几种方法
  16. Java IO留存查看
  17. Git提交分支
  18. Bypass X-WAF SQL注入防御(多姿势)
  19. 第2章 2.n物理层--数据通信基础知识总结
  20. [leetcode]438. Find All Anagrams in a String找出所有变位词

热门文章

  1. GWT-2.5.1离线安装
  2. Firefox火狐广告过滤插件Adblock Plus过滤规则包[中文维护小组]
  3. 字符串转换JSON 的方法
  4. Python-OpenCV中图像合并显示
  5. 2018.3.3 多线程中继承Thread 和实现Runnable接口 的比较(通过售票案例来分析)
  6. linux readahead
  7. Java替换手机号掩码
  8. vim 自动补全 颜色设置
  9. 关于SQL语言的初步认识
  10. iOS 打印系统字体