您的位置:首页 > 其它

练习三 1001

2016-05-03 16:13 239 查看
概述:求最大字段和,d[i]表示已
i 结尾(字段和中包含 i )在 a[1..i] 上的最大和。

思路:利用递推公式d[i]=(d[i-1]+a[i]>a[i])?d[i-1]+a[i]:a[i];max = {d[i],1<=i<=n} 即可

感想:第一题。

#include <iostream>
using namespace std;

int get(int data[] , int &l , int &r , int dl)
{
int max = -10000000 ;
l = 0 ;
r = 0 ;
int t = 1 ;
int mt = 0 ;
for(int i = 0 ; i < dl ; i++)
{
mt = mt +data[i];
if(mt > max)
{
max =  mt;
l = t ; r = i+1 ;
}

if(mt < 0)
{
mt = 0 ;
t = i+2 ;
}
}
return max ;
}

int main()
{
int num ;
cin >> num ;
for(int k = 1 ; k <= num ;k++)
{
int lg = 0 ;
cin >>lg ;
int * data = new int[lg];
for(int i =0 ;i < lg ; i++)
{
cin >>data[i];
}
int l = 0 , r = lg-1 ;
int max = 0 ;
max = get(data , l , r , lg);
cout<<"Case "<<k<<":"<<endl;
cout<<max<<" "<<l<<" "<<r<<endl;

if(k!=num)
cout<<endl;

}
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM DP 动态规划