NYOJ 17(LIS转为LCS,但是MLE)

#include<stdio.h>
#include<string.h>
#define N 10001
#define MAX(m,n) ((m)>(n)?(m):(n))
char a[N],b[N];
int d[N][N];
int cmp(const void *a,const void *b)
{
	return *(char *)a-*(char *)b;
}
int My_Cancel(int len)/*删除相邻的同样数据,不相邻的并不删除,即aabbab,输出abab不是

ab,成为单调递增,否则成为单调不减序列**/
{
	int i,j=0;
	for(i=0;i<len;i++)
	{
	  if(a[i+1]==a[i])
	   continue;
	  else
	  {
	   a[j+1]=a[i+1];
	   j++;
	  }
	}
	return j;
}
int LISL(int len)
{
	int i,j;
	for(i=1;i<=len;i++)
		d[i][0]=0;
	for(j=1;j<=len;j++)
		d[0][j]=0;
	for(i=1;i<=len;i++)
		for(j=1;j<=len;j++)
			if(a[i-1]==b[j-1])
				d[i][j]=d[i-1][j-1]+1;
			else 
				d[i][j]=MAX(d[i][j-1],d[i-1][j]);
	return d[len][len];
}
int main()
{
	int T,len1,len2;int i,j;
	scanf("%d%*c",&T);
	while(T--)
	{
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(d,0,sizeof(d));
		scanf("%s%*c",a);
		len1=strlen(a);
		len2=My_Cancel(len1);
		memcpy(b,a,sizeof(a));
		qsort(b,len2,sizeof(char),cmp);
		printf("%d\n",LISL(len2));
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/hxsyl/p/2516377.html