题意:给你n个数,找到最大的从左到右增加的子序列
思路:第一个数的长度肯定为一,后一个比它前面小的数的长度多一,然后找出最大的就行
#include<stdio.h>
#define max(a,b) a>b?a:b
int dp[1001];
int d[1001];
int main()
{
int i,j,n,temp;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&d[i]);
dp[i]=1;
}
for(i=2;i<=n;i++)
{
for(j=1;j<=i;j++)
{
if(d[i]>d[j])
dp[i] = max(dp[i],dp[j]+1);
}
}
temp=0;
for(i=1;i<=n;i++)
{
if(dp[i]>temp)
temp=dp[i];
}
printf("%d\n",temp);
}
注意:
1:今天又不小心乱用了memset,我说出来的值怎么这么大(memset赋值是以十六进制赋的)
2:觉得j不用遍历的,用一个变量记录下前面最长的或值小的