| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:终于过了,好像可以o(n)In Reply To:终于过了,好像可以o(n) Posted by:lyl625760 at 2008-11-17 23:42:03 >
> #include<iostream>
> using namespace std;
> int main()
> {
> int num;
> cin>>num;
> while(num--)
> {
> int n;
> cin>>n;
> int a[n];
> for(int i=0;i<n;i++)
> scanf("%d",&a[i]);
> //初始化
>
> int max=a[0]+a[1]; // 通过逐一扫描最后一个选中的元素位置,得解
> int temp1=a[0]; //0到i-2内单个最大子段
> int temp3=a[0]; // 0到i-2内以i-2为最后选中位置的单个最大子段
> int temp2=a[0]+a[1]; //以i为最后选中元素时题目要求的两段最大值
>
>
> for(int i=2;i<n;i++)
> {
> temp2=(temp2>temp1?temp2:temp1)+a[i]; //两种情况。是否包含i-1
>
> if(temp2>max)max=temp2;
> temp3=(temp3>0?temp3:0)+a[i-1]; //更新
> temp1=temp1>temp3?temp1:temp3; //是否包含i-1
> }
>
> cout<<max<<endl;
>
> }
>
> return 0;
>
>
> }
>
> 进一步请参阅:
> http://www.52xxyj.cn/52xxyj/blog/?action=show&id=85
> http://www.blog.edu.cn/user3/GOLDHUANG/archives/2006/1481691.shtml
> 及 http://blog.csdn.net/china8848/archive/2008/01/03/2015984.aspx
> 我也是看了诸前辈的大作,想我的菜鸟才做出来,效率还很低,居然575ms,惭愧,希望大家一起AC改进!
>
>
>
>
>
貌似你贴的这个代码是错误的
测试数据比较弱 所以能通过
你看这组数据:
1
3
-10 1 2
你的结果是:-7
正确答案应该是 3 吧?
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator