题目:https://codeforces.com/problemset/problem/1038/D

题意:给你n个数字,每个数字可以吃左右两边的数,然后吃完后自己变成 a[i]-a[i+1]或者a[i]-a[i-1],然后问你最后只剩一个数的时候最大可能的值是多少

思路:我们首先想是由哪一个数会留到最后,那他肯定会吃掉左边的数和右边的数,而如果要使当前数字尽量大,那么就要使左右两边的数字尽量小,我们要确定左边右边的数字尽量小的话,因为有负数的关系,我们每一步都要记录当前格子从左到右的最大值和最小值,然后同理再记录一个从右到左的,然后枚举哪一个留到最后,减去前缀最小和后缀最小即可

  1. #include<bits/stdc++.h>
  2. #define maxn 500005
  3. #define mod 1000000007
  4. using namespace std;
  5. typedef long long ll;
  6. ll n,a[maxn];
  7. ll dp1[maxn][];
  8. ll dp2[maxn][];
  9. int main(){
  10. cin>>n;
  11. for(int i=;i<=n;i++){
  12. cin>>a[i];
  13. }
  14. int q;
  15. dp1[n][]=a[n];dp1[n][]=a[n];
  16. dp2[][]=a[];dp2[][]=a[];
  17. for(int i=n-;i>=;i--){
  18. dp1[i][]=max(max(a[i]-dp1[i+][],a[i]+dp1[i+][]),dp1[i+][]-a[i]);
  19. dp1[i][]=min(min(a[i]-dp1[i+][],a[i]+dp1[i+][]),dp1[i+][]-a[i]);
  20. }
  21. for(int i=;i<=n-;i++){
  22. dp2[i][]=max(max(a[i]-dp2[i-][],a[i]+dp2[i-][]),dp2[i-][]-a[i]);
  23. dp2[i][]=min(min(a[i]-dp2[i-][],a[i]+dp2[i-][]),dp2[i-][]-a[i]);
  24. }
  25. ll mx=a[]-dp1[][];
  26. for(int i=;i<=n;i++){
  27. mx=max(mx,a[i]-dp1[i+][]-dp2[i-][]);
  28. }
  29. cout<<mx;
  30. }
  31. /*
  32. 5
  33. -14 -2 0 -19 -12
  34. 47
  35. */

CodeForces - 1038D (线性DP)的更多相关文章

  1. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  2. CodeForces - 1051D (线性DP)

    题目:https://codeforces.com/problemset/problem/1051/D 题意:一个2行n列的矩形,上面有黑白块,然后问你怎么布置才能有k个连通块,问有多少种方案数 思路 ...

  3. [CodeForces - 1272D] Remove One Element 【线性dp】

    [CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...

  4. [线性DP][codeforces-1110D.Jongmah]一道花里胡哨的DP题

    题目来源: Codeforces - 1110D 题意:你有n张牌(1,2,3,...,m)你要尽可能多的打出[x,x+1,x+2] 或者[x,x,x]的牌型,问最多能打出多少种牌 思路: 1.三组[ ...

  5. LightOJ1044 Palindrome Partitioning(区间DP+线性DP)

    问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...

  6. hdu1712 线性dp

    //Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...

  7. 动态规划——线性dp

    我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...

  8. POJ 2479-Maximum sum(线性dp)

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33918   Accepted: 10504 Des ...

  9. poj 1050 To the Max(线性dp)

    题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...

随机推荐

  1. Decision Tree Algorithm

    Decision Tree算法的思路是,将原始问题不断递归地细分为子问题,直到子问题直接可获得答案为止.在模型训练的过程中,根据训练集去做树的生长(Grow the tree),生长所有可能的Bran ...

  2. SQL标量函数

    调用 MS SQL 标量值函数,应该在函数前面加上 "dbo.",否则会报 “不是可以识别的 内置函数名称”错误.例如 DECLARE @WhichDB TINYINT;     ...

  3. 07 (H5*) js课程第8天 高阶函数、闭包、沙箱

    目录: 1:call和apply方法调用 2:bind方法复制 3:函数中的几个属性值 4:高阶函数,函数作为参数 5:高阶函数,函数作为返回值. 6:   作用域链,作用域,预解析 7:闭包--延长 ...

  4. Powershell read XML format config file

    upload.xml<?xml version="1.0" ?> <ftpConfig> <Protocol>ftp</Protocol& ...

  5. Go语言格式化字符串

    %s: 普通字符串 %q: 引号包含字符串 %x, %o, %b: 十六进制,8进制,2进制 %t: bool值 %d decimal integer %v any value in a natura ...

  6. 学习mybaits用到的4张表

    items orderdetail orders user

  7. jar 启动脚本

    前段时间用springboot做项目后,每次重新发布都好麻烦, 所以写了个脚本来配合jenkins 发布: #!/bin/bash APP_NAME=application.jar function ...

  8. RabbitMQ ——整体架构

    一 .概述 从整体上讲Rabbitmq就是一个生产者消费者的模型. 我们将中间的整个broker就当做是一个消息中间件的实体就可以了. 单从这个方面上讲,生产者发送消息到broker上面,然后消费者从 ...

  9. 各种条码的校验码算法(EAN13,COD128,GTIN,UCC等)

    校验码是由编码方案决定的,所以在代码中是否使用校验码和条码基本无关,但商品条码除外.今天给大家介绍几种校验码的计算方法. 一.商品条码: 商品条码中需要计算校验码的有:EAN-8(8位),EAN-13 ...

  10. React(2) --super关键字

    参考:http://www.phonegap100.com/thread-4911-1-1.html Es6中的super可以用在类的继承中,super关键字,它指代父类的实例(即父类的this对象) ...