Sicily 1685 Missile

DP,最長單調子序列的變形。

#include <stdio.h>
int dp[1010][2];
int nums[1010];
int get_max(int a, int b) {
	if (a>b)
		return a;
	else
		return b;
}
int main() {
	int i,j,n;
	int ans;
	scanf("%d",&n);
	while (n!=0) {
		for (i=1;i<=n;i++) {
			scanf("%d",&nums[i]);
			dp[i][0]=0;	// even
			dp[i][1]=1;	// odd
		}
		ans=0;
		for (i=1;i<=n;i++) {
			for (j=1;j<i;j++) {
				if (nums[j]>nums[i])
					dp[i][0]=get_max(dp[i][0], dp[j][1]+1);
				if (nums[j]<nums[i])
					dp[i][1]=get_max(dp[i][1], dp[j][0]+1);
			}
			ans=get_max(ans,get_max(dp[i][0],dp[i][1]));
		}
		printf("%d\n", ans);
		scanf("%d",&n);
	}
	return 0;
}


發佈了144 篇原創文章 · 獲贊 7 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章