hdu 1003 dp

确实十分经典的一题,但我是参照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;
}
}

原文地址:https://www.cnblogs.com/lfyy/p/2757767.html