1. 程式人生 > >HDU-1087(最長遞增序列)

HDU-1087(最長遞增序列)

其實一開始就有思路的,但是,我一看,演算法是兩重迴圈..雖然不超時,覺得還是不好,覺得DP應該不會這樣吧...

別了我很長時間,最後還是想去試試吧,,試了一試,還真是這麼算..暈了.

貼出程式碼:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>


int a[1005];

int dp[1005];


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


int main()
{
	int N;
	while(scanf("%d",&N),N)
	{
		a[0]=0;
		dp[0]=0;
		for(int i=1;i<=N;i++)
			scanf("%d",a+i);
		dp[1]=a[1];
		int maxi=0;
		for(i=2;i<=N;i++)
		{
			int t=0;
			for(int j=i-1;j>=1;j--)
			{
				if(a[i]>a[j])
					t=max(dp[j],t);
			}
			dp[i]=t+a[i];
			if(maxi<dp[i])
				maxi=dp[i];
		}
		printf("%d\n",maxi);
	}
	return 0;
}