题意

给出一个长度为\(n\)的数列和数字\(x\),经过最多一次操作将数列的一个子段的每个元素变为\(a[i]*x\),使该数列的最大子段和最大

分析

将这个数列分为3段考虑,第一段和第三段是未修改的,第二段是修改的子段

设\(dp[i][j]\)为第\(i\)个数字为第\(j+1\)段的最大子段和

三种转移方程

  • 第一段:\(dp[i][0]=max(a[i],dp[i-1][0]+a[i])\)
  • 第二段:\(dp[i][1]=max(a[i]*x,dp[i-1][0]+a[i]*x,dp[i-1][1]+a[i]*x)\)
  • 第三段:\(dp[i][2]=max(a[i],dp[i-1][0]+a[i],dp[i-1][1]+a[i],dp[i-1][2]+a[i])\)

Code

    #include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
const double PI=acos(-1.0);
const double eps=1e-6;
const ll inf=1e18;
const ll mod=1e9+7;
const int maxn=3e5+10;
int n;
ll x;
ll a[maxn];
ll dp[maxn][3];
int main(){
ios::sync_with_stdio(false);
cin>>n>>x;
ll ans=0;
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i][0]=max(a[i],dp[i-1][0]+a[i]);
dp[i][1]=max({a[i]*x,dp[i-1][1]+a[i]*x,dp[i-1][0]+a[i]*x});
dp[i][2]=max({a[i],dp[i-1][0]+a[i],dp[i-1][1]+a[i],dp[i-1][2]+a[i]});
ans=max({ans,dp[i][2],dp[i][0],dp[i][1]});
}
cout<<ans<<endl;
return 0;
}

Codeforces 1155 D Beautiful Array DP,最大子段和的更多相关文章

  1. Codeforces 1085G(1086E) Beautiful Matrix $dp$+树状数组

    题意 定义一个\(n*n\)的矩阵是\(beautiful\)的,需要满足以下三个条件: 1.每一行是一个排列. 2.上下相邻的两个元素的值不同. 再定义两个矩阵的字典序大的矩阵大(从左往右从上到下一 ...

  2. D. Beautiful Array DP

    https://codeforces.com/contest/1155/problem/D 这个题目还是不会写,挺难的,最后还是lj大佬教我的. 这个题目就是要分成三段来考虑, 第一段就是不进行乘,就 ...

  3. [Educational Codeforces Round 63 ] D. Beautiful Array (思维+DP)

    Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array time limit per test 2 seconds ...

  4. Educational Codeforces Round 63 D. Beautiful Array

    D. Beautiful Array time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. 北邮校赛 I. Beautiful Array(DP)

    I. Beautiful Array 2017- BUPT Collegiate Programming Contest - sync 时间限制 1000 ms 内存限制 65536 KB 题目描述 ...

  6. Codeforce 1155D Beautiful Array(DP)

    D. Beautiful Array You are given an array aa consisting of nn integers. Beauty of array is the maxim ...

  7. Educational Codeforces Round 56 (Rated for Div. 2) F - Vasya and Array dp好题

    F - Vasya and Array dp[ i ][ j ] 表示用了前 i 个数字并且最后一个数字是 j 的方案数. dp[ i ][ j ] = sumdp [i - 1 ][ j ], 这样 ...

  8. [codeforces 55]D. Beautiful numbers

    [codeforces 55]D. Beautiful numbers 试题描述 Volodya is an odd boy and his taste is strange as well. It ...

  9. Codeforces 442C Artem and Array(stack+贪婪)

    题目连接:Codeforces 442C Artem and Array 题目大意:给出一个数组,每次删除一个数.删除一个数的得分为两边数的最小值,假设左右有一边不存在则算作0分. 问最大得分是多少. ...

随机推荐

  1. javascript中return的作用

    这里面的return含有一些细节知识: 例如:onClick='return add_onclick()'与 onClick='add_onclick()'的区别 JAVASCRIPT在事件中调用函数 ...

  2. 辉光UIView的category

    辉光UIView的category 本人视频教程系类   iOS中CALayer的使用 效果如下: 源码: UIView+GlowView.h 与 UIView+GlowView.m // // UI ...

  3. Redis学习---Redis操作之List

    List操作,redis中的List在在内存中按照一个name对应一个List来存储 lpush(name,values) --> 实际上是左添加 # 在name对应的list中添加元素,每个新 ...

  4. Linux ip命令详解

    ip命令式用来配置网卡ip信息的命令,且是未来的趋势,重启网卡后IP失效 ip常见命令参数 Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ - ...

  5. java 和 javascript CryptoJS 进行HmacSHA1加密

    import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.Invali ...

  6. 对象.isdigit() ,只能判断全是数字的字符串

    s = "55p"" print(s.isdigit()) # False s2 = "5568" print(s2.isdigit()) # Tru ...

  7. 026.1 网络编程 获取IP地址

    前面提及的:OSI,TCP-IP,IP地址,端口,协议概念我都清楚,所以我直接跳过前面,来到使用这里. //获取本机IP InetAddress ip = InetAddress.getLocalHo ...

  8. Echarts使用小结

    还是先来简单的了解一下Echart是什么吧? ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前 ...

  9. 情绪ABC理论

    美国著名心理学家阿尔伯特·艾利斯 [Albert Ellis 1913.09.27]于20世纪50年代创立, 其理论认为引起人们情绪困扰的并不是外界发生的事件,而是人们对事件的态度.看法.评价等认知内 ...

  10. 使用redis4.0.1和redis-cluster搭建集群并编写重启shell脚本

    1.删除机器上原有的redis2.8 关闭redis-server killall -9 redis-server 查找redis文件所在目录 which redis 删除相关文件 rm -rf re ...