动态规划的最长上升子序列:
时间复杂度n^2.
#include<stdio.h>
using namespace std;
#define maxn 1002
int a[maxn],d[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
d[0]=1;
int ans=1;
for(int i=1;i<n;i++){
d[i]=1;
for(int j=0;j<i;j++){
if(a[j]<a[i]&&d[i]<d[j]+1)
d[i]=d[j]+1;
}
if(d[i]>ans)ans=d[i];
}
printf("%d\n",ans);
}
return 0;
}
看到网上有人用nlog写的,试了一下,果然快:
#include<stdio.h>
using namespace std;
#define maxn 1002
int s[maxn];
int n,top,temp,mid,high,low;
int main()
{
while(scanf("%d",&n)!=