51nod 1254最大子段和V2
来源:互联网 发布:nba选秀体测数据网 编辑:程序博客网 时间:2024/04/30 05:53
题意:让你能随意有一次机会交换任意两个数,然后求最大子段和。
题解:我们可以把这个题意变形一下:假设x只能和他前面的数交换,求最大子段和。变形以后就可以正反各做一遍然后统计答案就可以了。具体变形之后的O(N)DP怎么做请看佐理慧大神的题解https://www.51nod.com/question/index.html#!questionId=1078
我只能说我智商低下。。没有把max数组分左右。。
uses math;var i,j,k,p,n,m:longint; ans,ans1:int64; suml,sumr,dpl,dpr,a,sum1,sum2:array[0..300000]of int64;procedure swap(var x,y:longint);var t:longint;begin t:=x; x:=y; y:=t;end;begin readln(n); for i:=1 to n do read(a[i]); for i:=1 to n do suml[i]:=max(suml[i-1],0)+a[i]; for i:=n downto 1 do sumr[i]:=max(sumr[i+1],0)+a[i]; for i:=1 to n do sum1[i]:=max(a[i],sum1[i-1]); for i:=n downto 1 do sum2[i]:=max(a[i],sum2[i+1]); for i:=1 to n-1 do begin dpl[i+1]:=max(dpl[i]+a[i+1],sum1[i+1]); end; ans:=0; for i:=1 to n do ans:=max(ans,dpl[i-1]-a[i]+sumr[i]); for i:=n downto 1 do begin dpr[i-1]:=max(dpr[i]+a[i-1],sum2[i-1]); end; for i:=1 to n do ans:=max(ans,dpr[i+1]-a[i]+suml[i]); writeln(ans);end.
0 0
- 51nod 1254最大子段和V2
- 51Nod-1254-最大子段和 V2
- 51nod 1254 最大子段和 V2
- 51 nod 1254 最大子段和 V2(思维)
- 51nod 1053 最大M子段和 V2
- 51Nod-1053-最大M子段和 V2
- 51nod 1053 最大M子段和 V2
- 51nod 1053 最大M子段和 V2 (链表 对经典dp进行优化)
- 51nod 1053 最大M子段和 V2[贪心][链表][堆]
- 51nod 最大M子段和 V1,V2,V3 dp 贪心 heap(bzoj2288)
- 【贪心+优先队列】51Nod 1053 最大M子段和 V2
- 51nod 最大M子段和V2【贪心】【链表】【堆】
- 51nod最大子段和问题
- 51nod 1049 最大子段和
- 51Nod 1049 最大子段和
- 51nod:1049 最大子段和
- 51nod-最大子段和问题
- 51Nod--1049最大子段和
- Linux中执行shell脚本的4种方法总结
- mysql只能localhost连接,其他ip连接失败的解决办法
- linux下ImageMagick和Jmagic的安装
- 解决使用Spring上传时报错
- 2016.09.26---BeanUtils、ConvertUtils
- 51nod 1254最大子段和V2
- SAP财务报表不平之分析
- C#将文件复制到另一个目录下
- iOS tableView无限展开(配Demo下载)
- 第五周-C语言 输出斐波那契数列前n个数
- Y2K Accounting Bug
- listview 和 scrollview 冲突的问题
- 我用C语言实现“ 输入一个整数n,并求该整数n的阶乘”
- windows操作系统安装PLSQL后无法正常使用的问题