DP(动态规划求含有冻结期的买卖股票)-05-动态规划-买卖股票
题目描述
她希望你设计一个算法,在满足以下3个约束条件下,计算出最大利润。
1、 你可以多次买卖一支股票,但是对于每支股票,你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
2、 因为周转资金需要时间,Alice在买入股票前(第一次除外)需要等一天的时间。即在卖出当天的后天才能进行下一次买入。
3、 为了方便计算,你不用考虑持股数、Alice是否买得起等问题。每次买卖获得的利润就是卖出价减去买入价。
输入
接下来N行每行包含M个整数,分别表示这只股票第i天的股价(1<=Pi<=10000)。
输出
样例输入 Copy
2 5
1 2 3 0 2
0 0 5 4 3
样例输出 Copy
8
提示
第一天买入,第二天卖出,盈利1元。
第四天买入(第三天筹集资金不能买入),第五天卖出,盈利2元。
对于第二支股票:
第一天或者第二天买入,第三天之后卖出,盈利5元。
一共盈利8元。
#include <iostream>
#include <vector>
#include <stdio.h>
#include <queue>
#include <cmath>
using namespace std;
int n,m;
int main(){
int sum = ;
cin>>n>>m;
vector<int>day(m);
vector<vector<int> >dp(m + ,vector<int>(,));;
while(n--){
dp[][] = INT_MIN;//第0天买入,防止后面跌的数字都比它大
dp[][] = dp[][] = ;//第0天买入,没有收益
for(int i = ;i < m;i++){
cin>>day[i];
}
for(int i = ;i <= m;i++){
//dp[i][0]存放第i天没卖股票的收益
//dp[i][1]存放第i天卖了股票的收益
//dp[i][2]存放第i - 1天卖了股票,第i天为冷冻期的收益 dp[i][] = max(dp[i - ][],dp[i - ][] - day[i - ]);
//今天的收益等于max(昨天没卖有股票,今天才买股票)
dp[i][] = day[i - ] + dp[i][];
//今天0点卖股票后的收益等于今天持有的股票收益加上昨天的股票价格
dp[i][] = max(dp[i - ][],dp[i - ][]);
//今天冷冻期的话,今天的收益等于今天0点买股票或者昨天0点买股票
}
sum += max(dp[m][],dp[m][]);
}
cout << sum <<endl;
return ;
}
DP(动态规划求含有冻结期的买卖股票)-05-动态规划-买卖股票的更多相关文章
- 区间DP+next求循环节 uva 6876
// 区间DP+next求循环节 uva 6876 // 题意:化简字符串 并表示出来 // 思路:dp[i][j]表示 i到j的最小长度 // 分成两部分 再求一个循环节 #include < ...
- HDU 1003 Max Sum【动态规划求最大子序列和详解 】
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- [Leetcode 90]求含有重复数的子集 Subset II
[题目] Given a collection of integers that might contain duplicates, nums, return all possible subsets ...
- HDU 1081 To the Max 最大子矩阵(动态规划求最大连续子序列和)
Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- HDU 1024 Max Sum Plus Plus【动态规划求最大M子段和详解 】
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- poj3208 Apocalypse Someday 数位dp+二分 求第K(K <= 5*107)个有连续3个6的数。
/** 题目:poj3208 Apocalypse Someday 链接:http://poj.org/problem?id=3208 题意:求第K(K <= 5*107)个有连续3个6的数. ...
- HDU 1087 简单dp,求递增子序列使和最大
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- ZOJ 3329 One Person Game 【概率DP,求期望】
题意:有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和. 当分数大于n时结束.求游戏的期望步数.初始分数为0 设dp[i]表示达到 ...
随机推荐
- Flask - 总结
1. Flask.Django.Tornado框架区别 2. Flask快速入门 3. 配置文件 4. 路由系统 5. 模板 6. 请求&响应相关 7. session & cooki ...
- 中山Day5——普及
今天题目真是贼难呐...才38... 收获:树状数组单个修改 树状数组区间修改 T1:旅行 题意:有n个数,问;从中取任意个数,他们的和为质数的方案数是多少?(n<=50) 暴力模拟即可,这里不 ...
- Lesson 8 Trading standards
What makes trading between rich countires difficult? Chickens slautered in the United States, claim ...
- Oracle如何修改密码?如何解锁scott用户?
修改密码: scott用户的密码不对,进入管理员用户,修改scott用户密码即可 或者这样修改密码:在运行栏里面敲:sqlplus(空格)/nolog 回车接着在弹出框里面敲:conn sys/pas ...
- sklearn调用SVM算法
1.支撑向量机SVM是一种非常重要和广泛的机器学习算法,它的算法出发点是尽可能找到最优的决策边界,使得模型的泛化能力尽可能地好,因此SVM对未来数据的预测也是更加准确的. 2.SVM既可以解决分类问题 ...
- 入门学习C链接
参考链接:http://c.biancheng.net/view/465.html 在里面链接下载了:code:block,还有C语言入门的PDF文件. 常看网站:https://www.cnblog ...
- 02-02Android 学习进度报告二
今天我主要学习了Android的UI基础布局知识,主要是学习View与ViewGroup的概念以及其区别. 首先是代码说明: <?xml version="1.0" enco ...
- 第1节 storm编程:9、storm与kafka的整合
详见代码. 下图,为设置kafka的首次消费策略,即首次消费的偏移量的示例:
- English_Rhymes_Phonics_resource
English_Rhymes_Phonics_resource 1. 英语启蒙早有用吗?_英语启蒙 2. 26个英文字母背后的故事_英语启蒙 3. Phonics Song 4. 学Phonics前先 ...
- Linux CentOS7 VMware 文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr/chattr
一.文件和目录权限chmod u User,即文件或目录的拥有者:g Group,即文件或目录的所属群组:o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围:a All,即全部 ...