确实十分经典的一题,但我是参照dicuss 的题目做的,真是惭愧啊,
希望可以多接触些dp类型的题,提高自己水平
格外注意 sum 的代表含义,
#include<iostream>
#include<fstream>
using namespace std;
int sum[100001],s[100001],first[100001];
int main()
{
int N,T,i,k,temp,p;
ifstream cin("in.txt");
cin>>N;
for(i=0;i<N;i++)
{
cin>>T;
for(int j=0;j<T;j++)
cin>>s[j];
sum[0]=s[0];
first[0]=1;
for(int j=1;j<T;j++)//倒着搜写,嘎嘎
{
if(sum[j-1]<0)
{
sum[j]=s[j];
first[j]=j+1;
}
else
{
sum[j]=sum[j-1]+s[j];
first[j]=first[j-1];//如果满足条件,第一个坐标不会再变化,(又学习到了一种标记方法,嘿嘿)
}
}
temp=sum[0];
k=1;
p=1;
for(int j=1;j<T;j++)
if(temp<sum[j])
{
temp=sum[j];
k=first[j];
p=j+1;
}
cout<< "Case "<< i+1 << ":" << endl;
cout<< temp<< " " << k << " " << p << endl;
if(i<N-1)
cout<< endl;
}
}