Educational Codeforces Round 63 (Rated for Div. 2)D. Beautiful Array【最大子段和dp】
2019-04-24 22:34
399 查看
题目链接:https://codeforces.com/contest/1155/problem/D
题目大意:给你一个数组,求连续子数组乘以给定的x值之后算此数组的最大子段和。
思路:自己开始写的时候没思路,问了大佬,大佬告诉我是求最大子段和,自己又去学了一手,在dp数组上加上一维来记录状态,dp[i][0]表示当前点还未加入加倍区的最大子段和,dp[i][1]表示当前点加入加倍区的最大子段和,dp[i][2]表示当前点在加倍区之后的最大子段和。
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a[300005]; ll dp[300005][3];//dp[i][0]表示当前点还未加入加倍区的最大子段和,dp[i][1]表示当前点加入加倍区的最大子段和,dp[i][2]表示当前点在加倍区之后的最大子段和 int main() { int n,x; scanf("%d%d",&n,&x); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); } memset(dp,0,sizeof(dp)); ll ans=0; for(int i=1;i<=n;i++) { dp[i][0]=max((ll)0,dp[i-1][0]+a[i]); dp[i][1]=max((ll)0,max(dp[i-1][0],dp[i-1][1])+x*a[i]); dp[i][2]=max((ll)0,max(dp[i-1][1],dp[i-1][2])+a[i]); ans=max(ans,dp[i][0]);//这里不能偷懒直接sort,它会破坏当前的dp值,因为下一个点要用到当前点的dp值 ans=max(ans,dp[i][1]); ans=max(ans,dp[i][2]); } printf("%lld\n",ans); return 0; } /* Input 5 -2 -3 8 -2 1 -6 Output 22 Input 12 -3 1 3 3 7 1 3 3 7 1 3 3 7 Output 42 Input 5 10 -1 -2 -3 -4 -5 Output 0 */
我一定可以的!!!
相关文章推荐
- 【Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum】 数位DP
- Educational Codeforces Round 39 (Rated for Div. 2)(A-D)(水题 + 模拟 + 贪心模拟 + DP)
- Educational Codeforces Round 39 (Rated for Div. 2)D. Timetable(dp)
- Educational Codeforces Round 40 (Rated for Div. 2) F. Runner's Problem 前缀和求区间覆盖 矩阵快速幂优化DP 离散化
- Educational Codeforces Round 40 (Rated for Div. 2) C. Matrix Walk (一定要细心啊)
- Educational Codeforces Round 35 (Rated for Div. 2) E Stack Sorting
- Educational Codeforces Round 33 (Rated for Div. 2)
- Educational Codeforces Round 35 (Rated for Div. 2) A B C D
- Educational Codeforces Round 35 (Rated for Div. 2) D. Inversion Counting
- Educational Codeforces Round 37 (Rated for Div. 2)
- 【Educational Codeforces Round 48 (Rated for Div. 2) D】Vasya And The Matrix
- 【Educational Codeforces Round 38 (Rated for Div. 2)】 Problem A-D 题解
- 【Educational Codeforces Round 49 (Rated for Div. 2) 】
- Educational Codeforces Round 47 (Rated for Div. 2)E.Intercity Travelling
- Educational Codeforces Round 42 (Rated for Div. 2) D - Merge Equals
- 【Educational Codeforces Round 53 (Rated for Div. 2)】
- Educational Codeforces Round 33 (Rated for Div. 2) F - Subtree Minimum Query
- Educational Codeforces Round 37 (Rated for Div. 2)
- Educational Codeforces Round 33 (Rated for Div. 2)【C】【并查集】
- Educational Codeforces Round 40 (Rated for Div. 2)