菜鸟提问:C 语言的问题
从含有n个整型序列中删去若干个成分,使剩下的全部成分构成一个不减的子序列 除了这种算法
#include<stdio.h>
#include<stdlib.h>
#define N 100
#define n sizeof b/sizeof b[0]
int b[] = {100,200,300,400,500,60,70,80,90,100};
int a[N][N];
int main()
{
int k,i,j,m,x;
printf("原数组:");
for(i=0;i<n;i++)
printf("%d ",b[i]);
printf("\n");
for(x=0;x<N+1;x++)
a[0][x]=b[0];
k=1;
for(i=1;i<n;i++)
{
for(j=k;j>=1&&a[j][j-1]>b[i];j--);
for(m=0;m<j;m++) //长为j的子序列复制到长为j+1的子序列
a[j+1][m]=a[j][m];
a[j+1][j]=b[i]; //长为j+1的终元素存贮在a[j+1][j]
if(j==k)
k++; //最长不减子序列长k增1
}
printf("最长不减子序列:");
for(j=0;j<k;j++)
printf("%d ",a[k][j]);
printf("\n长度为:");
printf("%d\n",k);
system("pause");
return 0;
}
还有其他的算法吗?