杭电oj1003 寻找最大子序列

在这里插入图片描述

//刚开始编译错误可是在dev是正确的
//原因是导入了cmath文件而不是algorithm 
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100010; 
int main(){
	int T;
	cin>>T;
	int count=0;//样例个数 
	while(T--){
		count++;
		int dp[maxn],a[maxn];
		int N,i;
		cin>>N;
		for(i=1;i<=N;i++)
		cin>>a[i];//输入数字	
		dp[1]=a[1];
		for(i=2;i<=N;i++)
			dp[i]=max(a[i],a[i]+dp[i-1]);
		//下面这一步是找到最大的dp[i]
        int k=1;//k始终代表最大数的下标
		for(i=1;i<=N;i++){
			if(dp[i]>dp[k])
			k=i;
		}
		int max=dp[k];
		int end=k;//子序列的结束下标
		//下面开始找开始下标 
		int sum=0;
		int begin;
		for(i=end;i>=1;i--){
			sum+=a[i];
			if(sum==max)
			   begin=i;
		}//找到开始下标
	cout<<"Case "<<count<<":"<<endl;
	cout<<max<<" "<<begin<<" "<<end<<endl;
	if(T)
	cout<<endl;
	 		
	} 
	return 0;
} 
发布了13 篇原创文章 · 获赞 0 · 访问量 206

猜你喜欢

转载自blog.csdn.net/weixin_45191675/article/details/104693242