此算法做了很多不必要的计算,数组中每个元素都要遍历到最后一个,采用动态规划的方法可以遍历一次数组完成计算。
#include<iostream>
#include<vector>
using namespace std;
vector<int>a;
int couts=1;
void calculate(int x)
{
vector<long long int>b;
long long int model,sum,Sum=-100000;
int i,j,left,right,Left,Right;
for(i=0;i<x;i++)
{
for(sum=model=a[i],j=i+1,right=left=i;j<a.size();j++)
{
sum+=a[j];
if(sum>model){model=sum;right=j;}
}
if(Sum<model){Sum=model;Left=left;Right=right;}
}
cout<<"Case "<<couts++<<":\n"<<Sum<<' '<<++Left<<' '<<++Right<<"\n";
}
int main()
{
int n,x,x1,i;
#include<vector>
using namespace std;
vector<int>a;
int couts=1;
void calculate(int x)
{
vector<long long int>b;
long long int model,sum,Sum=-100000;
int i,j,left,right,Left,Right;
for(i=0;i<x;i++)
{
for(sum=model=a[i],j=i+1,right=left=i;j<a.size();j++)
{
sum+=a[j];
if(sum>model){model=sum;right=j;}
}
if(Sum<model){Sum=model;Left=left;Right=right;}
}
cout<<"Case "<<couts++<<":\n"<<Sum<<' '<<++Left<<' '<<++Right<<"\n";
}
int main()
{
int n,x,x1,i;
cin>>n;
while(n-->0)
{
cin>>x;
a.resize(x+100);
x1=x;
i=0;
while(x1-->0)cin>>a[i++];
calculate(x);
if(n)cout<<'\n';
}
return 0;
}
while(n-->0)
{
cin>>x;
a.resize(x+100);
x1=x;
i=0;
while(x1-->0)cin>>a[i++];
calculate(x);
if(n)cout<<'\n';
}
return 0;
}