题目:https://codeforces.com/contest/1155/problem/D

题意:给你n,x,一个n个数的序列,你可以选择一段区间,区间的数都乘以x,然后求出最大字段和

思路:

x正数的时候我们就是求出最大字段和然后乘以x即可

x为负数时,我们可以把一段负数乘以x,然后再与之前的正数连接,求出最大字段和,我们想一下

首先并不是直接求出最小字段和就可以的,给出一组样例

10 -1

0 -10 -10 -10 40 -10 -10 20 0 0

答案应该是80,而像上面的做法是不行的,我们应该要把序列分成三部分

最大字段和   乘以x的最大字段和   最大字段和

这样连着起来的三段枚举出来才是最优解

这个题显然只能让我们dp O(n)复杂度来解决

首先这应该分为三种状态,

第一种状态 dp[1] 求最大字段和即可                   推导式  dp[1]=max(dp[1]+a[i],0);

第二种状态  dp[2]应该是前面的最大字段和+当前的数             推导式   dp[2]=max(dp[1],dp[2]+x*a[i]);

第三种状态   dp[3]显然是前面两段的和再加上当前       推导式   dp[3]=max(dp[2],dp[3]+a[i]);

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,x,y;
ll dp[],ans;
int main(){
scanf("%lld%lld",&n,&x);
for(int i=;i<=n;i++){
scanf("%lld",&y);
dp[]=max(0LL,dp[]+y);
dp[]=max(dp[],dp[]+y*x);
dp[]=max(dp[],dp[]+y);
ans=max(ans,dp[]);
}
printf("%lld\n",ans);
return ;
}

Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array (简单DP)的更多相关文章

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

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

  2. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array(动态规划.递推)

    传送门 题意: 给你一个包含 n 个元素的序列 a[]: 定义序列 a[] 的 beauty 为序列 a[] 的连续区间的加和最大值,如果全为负数,则 beauty = 0: 例如: a[] = {1 ...

  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. poj2528 Mayor's posters (线段树+离散化)

    恩,这区间范围挺大的,需要离散化.如果TLE,还需要优化一下常数. AC代码 #include <stdio.h> #include <string.h> #include & ...

  2. python实现列表去重的方法

    >>> l=[,,,,,,] >>> list(set(l)) [, , , ] >>>

  3. SQL Server 第四章 存储过程(Procedure),触发器(Trigger),数据完整性(Data Integrity)

    use electric go --变量 --局部变量的声明格式 --declare @局部变量名 数据类型 --局部变量赋值 declare @littlepage int )) ) select ...

  4. 'telnet' 不是内部或外部命令,也不是可运行的程序

    1.打开控制面板 2. 3. 4.这样就好可,重新打开cmd命令.

  5. 请为CMyString类型编写构造函数、copy构造函数、析构函数和赋值运算符函数。

    如下为类型CMyString的声明,请为该类型编写构造函数.copy构造函数.析构函数和赋值运算符函数. class CMyString { public: CMyString(const char* ...

  6. 如何查看linux服务器内存使用情况

    1. free命令 free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存. 直接输入free命令,显示如下   free命令默认是显示单位kb,可以采用fr ...

  7. CentOS7部署Flask+Gunicorn+Nginx+Supervisor

    1. Git客户端 Win10安装git for windows 1.1 设置Git全局参数 打开Git Bash $ git config --global user.name "Alic ...

  8. day2作业

    购物车(两个程序)用户入口1商品信息存在文件里2已购商品,余额记录商家入口2可以添加商品,修改商品价格

  9. css常用的属性

    CSS------属性值篇 display: none | block | inline(默认值) | inline-block(css2新增) | inherit none :此元素不会再显示 {注 ...

  10. 利用itext将html页面转成pdf(不模糊)

    1.maven项目进入依赖 <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId> ...