传送门

题意:

  给你一个包含 n 个元素的序列 a[];

  定义序列 a[] 的 beauty 为序列 a[] 的连续区间的加和最大值,如果全为负数,则 beauty = 0;

  例如:

  a[] = {10, -5, 10, -4, 1} ;

  beauty = 15;( 10+(-5)+10 )

  a[] = {-3, -5, -1};

  beauty = 0;( 不取 )

  给你一个整数 x,你可以将序列 a[] 的任意子序列 a[ l , r ]*x(即 a[l]=a[l]*x,a[l+1]=a[l+1]*x,.....,a[r]=a[r]*x);

  当然,也可以不执行这个操作;

  求 beauty 的最大值;

思路:

  一看到这道题,第一反应就贪过去了;

  贪了好大一会,交了几发程序,全部 "Wrong answer on test 5";

  看了一眼他人的AC代码,看到了 dp 数组,然后,想了好久好久的动态规划解法;

  wa 了改,改了 wa,终于,在下午临近吃饭的时候,AC了(大佬轻点虐)

  

  假设修改的区间为[ L,R ]

  那么,对于∀i∈[1,n], i = L or L < i < R or i = R;

  定义 dp[ i ][ j ],含义如下:

  j = 0 : i 作为修改区间的起始位置,从 i 开始向左能形成的最大区间和;

  j = 1 : i 作为修改区间的中间位置,从 i 开始向左能形成的最大区间和;

  j = 2 : i 作为修改区间的终点位置,i 可以形成的最大区间和;

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define INFll 0x3f3f3f3f3f3f3f3f
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
const int maxn=3e5+; int n,x;
ll a[maxn];
/**
在做*x的操作下
dp[i][0]:i位置为修改区间的开始
dp[i][1]:i位置为修改区间的中间部分
dp[i][2]:i位置为修改区间的结尾
*/
ll dp[maxn][];
/**
在不做*x的操作下
maxL[i]:以i开始的向左能形成的最大的区间和
maxR[i]:以i开始的向右能形成的最大的区间和
*/
ll maxL[maxn];
ll maxR[maxn]; ll Solve()
{
maxL[]=-INFll;
for(int i=;i <= n;++i)
maxL[i]=max(maxL[i-]+a[i],a[i]);
maxR[n+]=-INFll;
for(int i=n;i >= ;--i)
maxR[i]=max(maxR[i+]+a[i],a[i]); dp[][]=dp[][]=;
for(int i=;i <= n;++i)
{
dp[i][]=x*a[i]+(maxL[i-] > ? maxL[i-]:);
dp[i][]=max(dp[i-][],dp[i-][])+x*a[i];
dp[i][]=max(dp[i][],dp[i][])+(maxR[i+] > ? maxR[i+]:);
} ll ans=;
for(int i=;i <= n;++i)
ans=max(max(ans,maxL[i]),dp[i][]); return ans;
}
int main()
{
while(~scanf("%d%d",&n,&x))
{
for(int i=;i <= n;++i)
scanf("%lld",a+i);
printf("%I64d\n",Solve());
}
}

巨巨代码(额外增加点我的注释)

 #include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long int n,x;
ll a[];
ll dp[][]; int main()
{
ll ans=;
cin>>n>>x;
for(int i=;i<=n;++i)
cin>>a[i]; mem(dp[],);
/**
dp[i][0]:[1,i]未使用*x所形成的最大区间和
dp[i][1]:[L,i-1]使用*x,并且i也使用*x所形成的最大区间和
dp[i][2]:[L,i-1]使用*x,但是i不使用*x所形成的最大区间和
*/
for(int i=;i<=n;++i)
{
dp[i][]=a[i]+(dp[i-][] > ? dp[i-][]:);
dp[i][]=max(0LL,max(dp[i-][],dp[i-][]))+a[i]*x;
dp[i][]=max(0LL,max(dp[i-][],dp[i-][]))+a[i];
for(int j=;j<;++j)//三者去最值
ans=max(ans,dp[i][j]);
}
cout<<ans<<endl; return ;
}

Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array(动态规划.递推)的更多相关文章

  1. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array (简单DP)

    题目:https://codeforces.com/contest/1155/problem/D 题意:给你n,x,一个n个数的序列,你可以选择一段区间,区间的数都乘以x,然后求出最大字段和 思路: ...

  2. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array 分类讨论连续递推dp

    题意:给出一个 数列 和一个x 可以对数列一个连续的部分 每个数乘以x  问该序列可以达到的最大连续序列和是多少 思路: 不是所有区间题目都是线段树!!!!!! 这题其实是一个很简单的dp 使用的是分 ...

  3. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  4. Educational Codeforces Round 63 (Rated for Div. 2) E 带模高斯消元

    https://codeforces.com/contest/1155/problem/E 题意 \(f(x)=a_0+a_1x+a_2x^2+...+a_kx^k,k \leq 10,0 \leq ...

  5. Educational Codeforces Round 63 (Rated for Div. 2) D dp(最大连续子序列)

    https://codeforces.com/contest/1155/problem/D 题意 一个n个数的数组\(a[i]\),可以选择连续的一段乘x,求最大连续子序列的值 题解 错误思路:贪心, ...

  6. Educational Codeforces Round 63 (Rated for Div. 2) B. Game with Telephone Numbers 博弈思维+模拟+贪心思维

    题意:博弈题面  给出一个数字序列 (>=11)  有两个人任意删除数字 直到 数字只剩下11位 如果删除后的数字串开头是8那么就是第一个赢 否则就是第二个人赢 第一个人先手  数字序列一定是奇 ...

  7. Educational Codeforces Round 63 (Rated for Div. 2) C. Alarm Clocks Everywhere gcd

    题意:给出一个递增的时间序列a  给出另外一个序列b  (都是整数) 以b中任选一个数字作为间隔  自己从1开始任选一个时间当成开始时间 输出选择的数字标号以及 开始时间 思路  直接求间隔的公共gc ...

  8. Educational Codeforces Round 63 (Rated for Div. 2)

    传送门 A. Reverse a Substring 题意: 给你一串 s,让你判断能否通过反转区间[l,r]的元素,使得反转后的串的字典序小于 s: 如果能,输出 "YES",并 ...

  9. Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph 【规律 && DFS】

    传送门:http://codeforces.com/contest/1093/problem/D D. Beautiful Graph time limit per test 2 seconds me ...

随机推荐

  1. h5与c3权威指南笔记--css3新属性选择器

    [att*=val] 选择所有att属性值中包含val的.只要包含val值,不论val值在属性值的前面还是中间还是后面~ <style> div[class*=div]{ color: r ...

  2. axios 封装

    来自:https://www.jianshu.com/p/68d81da4e1ad 侵删 import axios from 'axios' import qs from 'qs' let baseu ...

  3. python的学习笔记__初识函数

    函数定义与调用 #函数定义 def mylen(): """计算s1的长度""" s1 = "hello world" ...

  4. iPhone手机怎么投影到MacPro上

    https://www.bilibili.com/video/av27255821/ 2.使用Refletor,记得电脑和手机使用同一个wifi

  5. K邻近回归算法

    代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 10:40:22 2018 @author: zhen &qu ...

  6. python不能调试的原因

    最近有一个python项目,打开项目不能登录,想调试一下看看为什么,发现不能调试了,郁闷了,搞了半天,发现是进程里有多个python.exe,结束掉就好了.

  7. 设置MYSQL数据库编码为UTF-8

    设置MYSQL数据库编码为UTF-8   1.  编辑MySql的配置文件 MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一 ...

  8. HP LasterJet 3050驱动安装技巧,面向win7,8,8.1,10

    最近上咸鱼淘二手打印机,看中了这款打印机,HP官网一查发现还是有新驱动的,比较激动就下单买了,200元自提也不贵,打印效果勉强凑合,打印图片有不太明显的白线,不知是何原因····· 买来插上电脑,自动 ...

  9. Cordova入门系列(二)分析第一个helloworld项目 转发 https://www.cnblogs.com/lishuxue/p/6015420.html

    Cordova入门系列(二)分析第一个helloworld项目   版权声明:本文为博主原创文章,转载请注明出处 上一章我们介绍了如何创建一个cordova android项目,这章我们介绍一下创建的 ...

  10. openstack 2019/4/28

    官网参考地址:https://docs.openstack.org/keystone/queens/install/index-rdo.html (但愿能看懂) 环境:这个部分解释如何按示例架构配置控 ...