题目网址: http://cstfs.gdufs.edu.cn:8080/JudgeOnline/problem.jsp?id=1130
#include<stdio.h>
#include<string.h>
int a[1000],b[1000];
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int sum,total=0;
for(i=1;i<=n;i++)
{
memset(b,sizeof(b),0);
int k=1;
sum=1;b[k]=a[i];
for(j=i+1;j<=n;j++)
{
if(a[j]>b[k]&&a[j]>b[k-1])
{
b[++k]=a[j];
sum++;
}
else if(a[j]<b[k]&&a[j]>b[k-1])//9 4 1 3 5 2 9 7 6 8
{
b[k]=a[j];
//sum++;
}
}
if(total<sum)total=sum;
}
printf("%d\n",total);
return 0;
}
入门DP,不过用暴力做了一下,以下是动态规划算法
#include<stdio.h>
int a[1001],b[1001];
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
b[1]=1;int totalsum=b[1];
for(i=2;i<=n;i++)
{
int sum=0;
for(j=1;j<i;j++)
{
if(a[i]>a[j]&&sum<b[j])
{
sum=b[j];
}
}
b[j]=sum+1;
if(b[j]>totalsum)
totalsum=b[j];
}
printf("%d\n",totalsum);
return 0;
}