DP(dynamic programming)最大连续子序列

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;

#define maxn 100100
int a[maxn],dp[maxn];

int max(int a,int b)
{
	return a>b ? a:b;
}

int main()
{
	int n,k;
	
	while(scanf("%d",&n)!=EOF)
	{
		memset(dp,0,sizeof(dp));
		if(n==0)
		{
			continue;
		}
		
		int flag=0;
		for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]<0)
		flag++;
	}
	
	if(flag==n)
	{
		printf("%d %d %d\n",0,a[0],a[n-1]);
		continue;
	}
	
	dp[0]=a[0];
	
	for(int i=1;i<n;i++)
	{
		dp[i]=max(a[i],dp[i-1]+a[i]);
	}
	
	k=dp[0];
	int t;
	for(int i=1;i<n;i++)
	{
		if(dp[i]>k)
		{   
		    t=i;
			k=dp[i];
		}
	}

    int num[100000];
    int SUM=k;
    int p=0;
	for(int i=t;i>=0;i--)
	{
		SUM=SUM-a[i];
		if(SUM!=0)
		{
			num[p]=a[i];
			p++;
		}
		else
		{
			num[p]=a[i];p++;
			break;
		}
	}
	
	printf("%d %d %d\n",k,num[p-1],num[0]);
	
	
	}
	
	
	return 0;
} 

第一道DP AC,纪念一下。

最大连续子序列。。。。写的好凌乱。。风吹啊吹,吹乱我代码花园。。但吹不走我的骄傲放纵,

猜你喜欢

转载自blog.csdn.net/LaoXiangQ/article/details/84667897