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

简介: #include #include #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) { re...
#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;
}

  

目录
相关文章
|
2月前
|
算法
动态规划算法学习四:最大上升子序列问题(LIS:Longest Increasing Subsequence)
这篇文章介绍了动态规划算法中解决最大上升子序列问题(LIS)的方法,包括问题的描述、动态规划的步骤、状态表示、递推方程、计算最优值以及优化方法,如非动态规划的二分法。
79 0
动态规划算法学习四:最大上升子序列问题(LIS:Longest Increasing Subsequence)
|
7月前
LIS,LCS,LCIS
LIS,LCS,LCIS
49 0
|
存储 算法 数据处理
求解TOPK问题
求解TOPK问题
38 0
51nod 1189 阶乘分数(数论)
51nod 1189 阶乘分数(数论)
60 0
|
算法 PHP Python
最长公共子串- LCS 算法
最长公共子串- LCS 算法
100 0
|
网络架构
Codeforces Round #755 D. Guess the Permutation(交互 二分)
Codeforces Round #755 D. Guess the Permutation(交互 二分)
93 0