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]表示达到 ...
随机推荐
- ASP.NET MVC Web项目中使用Log4Net记录日志,并按照日志类型分文件存储
1.创建MvcLog4Net项目 2.创建 空的MVC项目 3.项目创建完成的效果 4.选择项目,点击鼠标右键,在弹出菜单中选择“管理解决方案的 NuGet 程序包” 5. 在NuGet浏览界面: 点 ...
- 二 sql语句,常用字段数据类型
MySQL中常用DDL命令 database definition language 与 DML命令 : database definition language 操作数据库: 创建数据库 : ...
- classmethode,staticmethode
目录 classmethod: staticmethod: 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法 而使用@staticmethod或@classmethod,就可以不需要实例化 ...
- python deepcopy的替代方案
from copy import deepcopy import marshal import timeit from multidict import CIMultiDict def test_de ...
- Oracle查看正在执行的存储过程
正在执行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks >0 and pin ...
- java学习-循环结构-递归练习1-汉诺塔问题
相传在印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘(如下图).游戏的目标:把A杆上的金盘全部移 ...
- ng -----监听变化($scope.$watch())
需求:项目组件中遇到改变日期触发方法. 困难:日期组件中不涉及释焦功能 解决:在angularjs中用$scope.$watch() 其中name是字符串,是指监听到的具体对象值.
- 「USACO5.4」奶牛的电信Telecowmunication
传送门 Luogu 解题思路 题目要求的是最小割点集,考虑用最小割来做. 所有边容量为1,直接求最小割? 这样肯定会出错,比如这种情况: 从最左边的点到最右边的点的最小割为2,但是答案是1,只要破坏中 ...
- 「JLOI2014」聪明的燕姿
传送门 Luogu 解题思路 很容易想到直接构造合法的数,但是这显然是会T飞的. 我们需要考虑这样一件事: 对于一个数 \(n\),对其进行质因数分解: \[n=\sum_{i=1}^x p_i^{c ...
- 装系统:Win7,机子是Dell 5460,有半高的mSATA SSD
问题描述:Dell Vostro 5460有一个机械盘,有一个半高的mSATA SSD,现在想将系统重装到mSATA SSD上,但是机子BIOS的Boot选项没有mSATA,只有机械盘,怎么办? 解决 ...