题目描述

Alice这次决定去股市里当一波韭菜。 
她希望你设计一个算法,在满足以下3个约束条件下,计算出最大利润。 
1、  你可以多次买卖一支股票,但是对于每支股票,你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 
2、  因为周转资金需要时间,Alice在买入股票前(第一次除外)需要等一天的时间。即在卖出当天的后天才能进行下一次买入。 
3、  为了方便计算,你不用考虑持股数、Alice是否买得起等问题。每次买卖获得的利润就是卖出价减去买入价。 

输入

第一行股票样个数N(1<=N<=100),天数M(1<=M<=100)。 
接下来N行每行包含M个整数,分别表示这只股票第i天的股价(1<=Pi<=10000)。 

输出

输出一个数字,表示Alice的最大盈利。 

样例输入 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-动态规划-买卖股票的更多相关文章

  1. 区间DP+next求循环节 uva 6876

    // 区间DP+next求循环节 uva 6876 // 题意:化简字符串 并表示出来 // 思路:dp[i][j]表示 i到j的最小长度 // 分成两部分 再求一个循环节 #include < ...

  2. HDU 1003 Max Sum【动态规划求最大子序列和详解 】

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. [Leetcode 90]求含有重复数的子集 Subset II

    [题目] Given a collection of integers that might contain duplicates, nums, return all possible subsets ...

  4. HDU 1081 To the Max 最大子矩阵(动态规划求最大连续子序列和)

    Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...

  5. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  6. 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 ...

  7. 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的数. ...

  8. HDU 1087 简单dp,求递增子序列使和最大

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. ZOJ 3329 One Person Game 【概率DP,求期望】

    题意:有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和. 当分数大于n时结束.求游戏的期望步数.初始分数为0 设dp[i]表示达到 ...

随机推荐

  1. 算法设计与分析 - AC 题目 - 第 2 弹

    PTA-算法设计与分析-AC原题7-1 最大子列和问题 (20分)给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 ...

  2. 最新获取SkyDrive音乐外链mp3地址方法20131003

    最新获取SkyDrive音乐外链方法20131003在文章底部更新,欢迎使用! 这已经是第三次写获取SkyDrive音乐外链mp3地址方法的文章了,因为第一次.第二次都失效了.三篇文章都有个共同点,都 ...

  3. 修改gho打造个性ghostxp光盘

    一.更换OEM信息(更改用户名.公司名与电脑名的方法 1.用软碟通提取出ghostxp中的gho镜像文件. 2.,用GHOSTEXP .EXE打开这个GHO文件,提取sysprep目录下的syspre ...

  4. css选择器优先级排序

    浏览器默认属性 < 继承自父元素的属性 < 通配符选择器 < 标签选择器 < 类选择器 < 结构伪类选择器 < id选择器 < 行内样式 < !impo ...

  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:选择框(Select)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:显示下拉式功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. luffy 那点事

    1 虚拟环境创建 2 后台:Django项目创建 3 后台配置 4 数据库配置 5 user模块User表 6 前台 7 前台配置 8 前端主页 9 后端主页模块设计 10 xadmin 后台管理 1 ...

  8. Python作业篇 day03

    ###一.有变量name = 'aleX leNb',完成如下的操作 name = 'aleX leNb' name1 = ' aleX leNb ' #1.移除name1 变量对应的值两边的空格 , ...

  9. Victor and String[Bestcoder #52 1004](回文树)

    题目描述 Victor喜欢玩字符串.他认为一个字符串是迷人的,当且仅当字符串是回文的.Victor想玩n次.每次他都会做以下四种操作中的一种.操作1:在字符串的开头添加一个字符 c.操作2:在字符串的 ...

  10. Shiro登录身份认证(从SecurityUtils.getSubject().login(token))到Realm的doGetAuthenticationInfo

    ssm框架下,controller接收到登录请求交给Service并开始处理流程: 1.Service的login方法: @Service public class SysUserServiceImp ...