HDU 1087 Super Jumping! Jumping! Jumping! (DP(LIS))

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087

题意:给你n个数,求n个数的最长上升子序列的和的最大值。

题解:简单的DP ,定义dp【i】为以num【i】结尾的最长上升子序列和的最大值。

然后 看代码把

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+ 5;
int num[maxn],dp[maxn];
int main(){
	int n,Max;
	while(~scanf("%d",&n)){
		if(n == 0) break;
		Max = 0;
		memset(dp,0,sizeof(dp));
		for(int i = 0 ; i < n ; i ++){
			scanf("%d",&num[i]);
		}
		dp[0] = num[0];
		for(int i = 1; i < n ; i ++){
			for(int j  = 0 ; j < i ; j ++){
				if(num[i] > num[j]){
					dp[i] = max(dp[i],dp[j]+num[i]);
				}
			}
			dp[i] = max(dp[i],num[i]);
		}
		for(int i = 0 ; i < n ; i ++){
			Max = max(Max,dp[i]);
		}
		printf("%d\n",Max);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/PK__PK/article/details/81482834
今日推荐