AcWing 1057. 股票买卖 IV
2024-09-05 11:35:08
//f[i,j,1]表示走到第i天已经进行完j次交易并且手中没有股票的所有的购买方式的集合
//f[i,j,0]表示走到第i天并且正在进行第j次交易且手中有货的所有的购买方式的集合
//属性利益最大值
//f[i,j,0]=max(f[i-1,j,0],f[i-1,j,1]+w[i])
//表示从手中无货(不买)转移到手中无货 或者 手中有货(卖出)转移到手中无货
//f[i,j,1]=max(f[i-1,j,1],f[i-1,j-1,0]-w[i])
//表示从手中有货(不卖) 转移到手中有货 或者 手中无货(买进) 转移到手中有货
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = , M = , INF = 0x3f3f3f3f;
int n, m;
int w[N];
int f[N][M][];
int main()
{
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i ++ ) scanf("%d", &w[i]);
//一开始手中一定无货 也就是从初始状态走到无货状态 那么到有货状态为负无穷
memset(f, -0x3f, sizeof f);
//如果一次交易都没有进行,j=0,表示手中无货 f[i,0,0]是合法的,为0
//f[i,0,1]不合法,为负无穷
for (int i = ; i <= n; i ++ ) f[i][][] = ;
for (int i = ; i <= n; i ++ )
for (int j = ; j <= m; j ++ )
{
f[i][j][] = max(f[i - ][j][], f[i - ][j][] + w[i]);
f[i][j][] = max(f[i - ][j][], f[i - ][j - ][] - w[i]);
}
int res = ;
for (int i = ; i <= m; i ++ ) res = max(res, f[n][i][]);
printf("%d\n", res);
return ;
}
最新文章
- javascript - 享元模式
- JDBC的一些基础提交语句回顾
- Linux编程 ---- dup函数
- hdu1260 dp
- object references an unsaved transient instance - save the transient instance before flushing错误
- lazyload.js实现图片异步载入
- phpstorm 实用快捷键 和 注释
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
- 【转】【Http】Http各种错误的意思
- CUBRID学习笔记 7 ms常见错误
- vs2013常用快捷键收集
- Cookie与Session的一些总结
- [NYOJ 860] 又见01背包
- VS2010 release 和 debug 调试区别
- insert 加的锁
- Mysql 忘密码 + Phpadmin 修改密码无法登陆
- 《Android系统源代码情景分析》连载回忆录:灵感之源
- bzoj 2946
- MySQL — 优化之explain执行计划详解(转)
- linux随手笔记(Centos为主)