Hdu 1257 LIS拦截系统 最大上升子序列或动态规划

语言表达能力欠佳。。。

思路一:依次递减序列的最小个数其实就是求最大上升子序列

思路二:正常思路:开始所有的(就是dp数组)都默认为使用系统1,a[i]>a[j](0

例如 4     8 100 6 3

当i遍历到第最后一个的时候,对于系统1,如果a[i]<系统1的最小高度,就会被拦截。a[i]就一定会是比系统2的最小高度要小(即是3>100),因为如果前面是2(2<3),2一定会比3先被系统1拦截

#include 
#include 
#include 
using namespace std;
#define maxn 100000
int a[maxn];
int dp[maxn];

int main()
{
	int N;
	while(EOF!=scanf("%d",&N))
	{
		int i,j;
		for(i=0;ia[j]){
					dp[i]=max(dp[i],dp[j]+1);
				}
			}
		}	
		int Max=0;
		for(i=0;i

 

你可能感兴趣的:(动态规划,乱七八糟)