标签:
<div class="problem-display" style="font-size: 14px; color: rgb(70, 70, 70); font-family: Tahoma, Arial, sans-serif, simsun;"><h2 style="margin: 0px; padding: 0px; font-size: 18px; text-align: center; color: rgb(113, 32, 21); font-family: 微软雅黑, 黑体;">子串和</h2><div class="problem-ins" style="text-align: center;">时间限制:<span class="editable highlight" id="problem[time_limit]" style="color: rgb(113, 32, 21);">5000</span> ms | 内存限制:<span class="editable highlight" id="problem[memory_limit]" style="color: rgb(113, 32, 21);">65535</span> KB</div><div class="problem-ins" style="text-align: center;">难度:<span class="editable highlight" style="color: rgb(113, 32, 21);">3</span></div></div><div class="clr" style="clear: both; color: rgb(70, 70, 70); font-family: Tahoma, Arial, sans-serif, simsun; font-size: 12.800000190734863px; line-height: 15.199999809265137px;"></div><dl class="problem-display" style="margin: 0px; padding: 0px; color: rgb(70, 70, 70); font-family: Tahoma, Arial, sans-serif, simsun;"><dt style="font-size: 16px; margin: 1em 0px 0.2em; padding: 0px; color: rgb(113, 32, 21); font-weight: bold;">描述</dt><dd style="font-size: 14px; margin: 0px; padding: 0px;"><span style="color: rgb(18, 28, 70); font-family: Verdana, 宋体;">给定一整型数列{a<sub>1</sub>,a<sub>2</sub>...,a<sub>n</sub>},找出连续非空子串{a<sub>x</sub>,a<sub>x+1</sub>,...,a<sub>y</sub>},使得该子序列的和最大,其中,1<=x<=y<=n。</span></dd><div class="clr" style="font-size: 14px; clear: both;"></div><dl class="others" style="margin: 0px; padding: 0px;"><dt style="font-size: 16px; margin: 1em 0px 0.2em; padding: 0px; color: rgb(113, 32, 21); font-weight: bold;">输入</dt><dd style="font-size: 14px; margin: 0px; padding: 0px;">第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)</dd><dt style="font-size: 16px; margin: 1em 0px 0.2em; padding: 0px; color: rgb(113, 32, 21); font-weight: bold;">输出</dt><dd style="font-size: 14px; margin: 0px; padding: 0px;">对于每组测试数据输出和最大的连续子串的和。</dd><dt style="font-size: 16px; margin: 1em 0px 0.2em; padding: 0px; color: rgb(113, 32, 21); font-weight: bold;">样例输入</dt><dd style="font-size: 14px; margin: 0px; padding: 0px;"><pre id="sample_input" style="margin-top: 0px; margin-bottom: 0px; padding: 5px 10px; font-family: Consolas, 'Courier New', 'DejaVu Sans Mono', 'Droid Sans Mono', monospace; background-color: rgb(239, 239, 239); border: 1px solid rgb(204, 204, 204); min-height: 20px; line-height: 1.5em;">1
5
1 2 -1 3 -2
5
#include<iostream>
using namespace std;
int main()
{
int N,i,num,sum,max;
cin>>N;
while(N--)
{
max=-200;
sum=0;
int n;
cin>>n;
for(i=0;i<n;i++)
{
cin>>num;
sum=sum+num;// 1 2 -1 3 -2
if(sum>max) //-5 3 3 -9 2 2 24
{
max=sum;
}
if(sum<0)
{
sum=0;
}
}
cout<<max<<endl;
}
return 0;
}
<span style="font-size:24px;">下面start 和end 是最大字串和的起末位置。。</span>
#include<iostream>
using namespace std;
int main()
{
int N,i,num,sum,max,start,end,k;
cin>>N;
while(N--)
{
max=-200;
sum=0;
k=start=end=1;
int n;
cin>>n;
for(i=0;i<n;i++)
{
cin>>num;
sum=sum+num;// 1 2 -1 3 -2
if(sum>max) //-5 3 3 -9 2 2 24
{
max=sum;
start=k;
end=i+1;
}
if(sum<0)
{
sum=0;
k=i+2;
}
}
cout<<max<<endl;
}
return 0;
}标签:
原文地址:http://blog.csdn.net/zuguodexiaoguoabc/article/details/44062271