股票买卖

题目

阿福该炒股了,然后假设他已经预测到了后几天的股票,要求他最多买卖两次的赚到的最大值。
(注:他只有第一次卖了才能再买)


输入

3
7
5 14 -2 4 9 3 17
6
6 8 7 4 1 -2
4
18 9 5 2

输出

28
2
0


解题思路

用f[i]表示从1到i天买一次的最优解,fm[i]表示从第i天到第n天买一次的最优解,然后枚举一下咯(是的吧)。


代码

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int t,a[100001],maxs,n,min1,max1,min2,max2;
int fm[100001],f[100001];
int main()
{scanf("%d",&t);for (int ti=1;ti<=t;ti++){memset(f,0,sizeof(f));memset(fm,0,sizeof(fm));//清零maxs=0;scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&a[i]);}maxs=a[n];for (int i=n-1;i>=1;i--) {maxs=max(a[i],maxs);f[i]=max(maxs-a[i],f[i+1]);}//求fmaxs=a[1];for (int i=2;i<=n;i++) {maxs=min(a[i],maxs);fm[i]=max(a[i]-maxs,fm[i-1]);}//求fmmaxs=0;for (int i=2;i<n;i++){maxs=max(f[i]+fm[i],maxs);}//求最大值printf("%d\n",max(a[2]-a[1],maxs));}
}



Maximum sum

题目

求两个不重复的子段和,让他最大


输入

1

10
1 -1 2 2 3 -3 4 -4 5 -5

输出

13


解题思路

同上
用f[i]表示从1到i个的最大子段和,fm[i]表示从第i个到第n个的最大子段和,然后枚举一下咯(是的吧)。


代码

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int
t,n,mins,f[50002],s[50002],fm[50002],a[50002];
int main()
{scanf("%d",&t);for (int ti=1;ti<=t;ti++){memset(f,0,sizeof(f));memset(fm,0,sizeof(fm));memset(s,0,sizeof(s));scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&a[i]);s[i]=s[i-1]+a[i];}f[1]=a[1];mins=min(s[1],0);for (int i=2;i<=n;i++){f[i]=max(fm[i-1],s[i]-mins);mins=min(s[i],mins);}//求ffor (int i=n;i>=1;i--){s[i]=s[i+1]+a[i];}fm[n]=a[n];mins=min(s[n],0);for (int i=n-1;i>=1;i--){fm[i]=max(fm[i+1],s[i]-mins);mins=min(s[i],mins);}//求fmmins=-23333333;for (int i=1;i<n;i++){mins=max(mins,f[i]+fm[i+1]);}//求最大值printf("%d\n",mins);}
}

OJ4121 and OJ2968-股票买卖 and Maximun sum【各种dp之6 and 9】相关推荐

  1. codeforces1485 F. Copy or Prefix Sum(dp)

    F. Copy or Prefix Sum Venice technique简要就是懒标记思想. 由于前缀和数组和原数组一一对应,这里我们选择求aia_iai​的前缀和数组的方案数(下面aia_iai ...

  2. 杭电60题--part 1 HDU1003 Max Sum(DP 动态规划)

    最近想学DP,锻炼思维,记录一下自己踩到的坑,来写一波详细的结题报告,持续更新. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Problem ...

  3. UVA 10891 SUM游戏 DP

    刚看到这个题目不知道怎么个DP法,有点难想到 解法如下 设置dp[i][j]代表i到j这段子序列能获得的最大值,这样,枚举m=min(m,dp[i+1到j][j],dp[i][i到j-1]),m就代表 ...

  4. CF577B Modulo Sum(dp,抽屉原理 | bitset优化 | 二进制优化)

     洛谷链接: Modulo Sum - 洛谷 思路: 明显是一个背包问题,要求子序列和整除m,即sum%m = 0,所以边取模边求和即可.但是朴素做法的时间复杂度是O(nm),会TLE.有三种优化思路 ...

  5. Codeforces1442 D. Sum(dp+分治优化)

    题意: 解法: 首先k<=3e3但t[i]<=1e6, 那么当t[i]>k时多出来的一定取不到, 因此只保留前k个即可.最多只有一个序列不全取,只选一部分, 其他为全选或者全不选.考 ...

  6. HDU 1024:Max Sum Plus Plus(DP)

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): ...

  7. Codeforces-33C. Wonderful Randomized Sum

    传送门 N个数,允许将前连续任意个数变化为其相反数,也允许把后连续任意个数变为相反数,求最大和 令dp[i][0]前i个数操作后能得到的最大值,dp[i][1]出去前i-1个数操作后能得到的最大值 注 ...

  8. leetcode 377. Combination Sum IV | 377. 组合总和 Ⅳ(动态规划)

    题目 https://leetcode.com/problems/combination-sum-iv/ 题解 最近养成了上来直奔 Related Topics 的习惯- 确认过眼神,又是个 dp 问 ...

  9. 【UVA - 10891 Game of Sum 】【HRBUST - 1622】 Alice and Bob (区间dp,博弈问题)

    题干: 有一个长度为N的整数序列,Alice和Bob轮流取数,Alice先取.每次玩家只能从左端或者右端 取一个或多个数,但不能两端都取.所有数都被取走后游戏结束,然后统计每个人取走的所有数之和, 作 ...

最新文章

  1. (原)使用mkl计算特征值和特征向量
  2. C#进行Visio二次开发之电气线路停电分析逻辑
  3. elasticsearch数据长期保存的方案
  4. MPI编程及性能优化
  5. Extension Method (확장 메서드)
  6. jqgrid定义多选操作
  7. CentOS 6.4下操作kdump执行过程
  8. webpack编译流程漫谈
  9. 模2运算 / 模2算法(模2加法、模2减法、模2乘法、模2除法)
  10. Redis内存碎片处理
  11. 机器学习实践:Spark MLlib库介绍与使用-3
  12. 韩昊 20190919-2 功能测试
  13. Excel多列数据的连接
  14. 曾經的文字﹐曾經的歲月
  15. 2021-08-20
  16. [2001-2003美/新等合拍经典奇幻大片][魔戒1-3][BD-RMVB][中英字幕/1280x720高清晰版]
  17. Linux下更改时间、时区
  18. 2021年中考计算机考试,2021年中考这样改革,初一初二考生需提前了解!
  19. mysql去年同期_sql统计 本期 ,上期 ,去年同期 数据
  20. XilinxFPGA: Vivado ISE

热门文章

  1. linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动
  2. scrcpy投屏_安卓投屏利器——PC一键控制多台手机
  3. c语言三目运算符_C语言中的三目运算符是啥?有何用处?
  4. php用ajaxs上传图片_jquery+ajax+php 图片上传
  5. 如何动态的生成某种类型的集合呢_知乎画报」的移动端动态化工程实践
  6. 在php中使用kind,KindEditor 4.x在PHP中的应用实例!
  7. 实现option上下移动_用jQuery实现lt;selectgt;选项上下移动 - 不要哀求 学会争取 若是如此 终有所获 - ITeye博客...
  8. java实用教程——组件及事件处理——布局的一个小实例
  9. leetcode150. 逆波兰表达式求值
  10. 『软件工程4』一文了解软件项目管理中的4P