询问
  • 板块灌水区
  • 楼主MarsPlan2025
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/9 18:52
  • 上次更新2024/8/9 20:08:02
查看原帖
询问
1080300
MarsPlan2025楼主2024/8/9 18:52

有人知道这个代码的原理以及用处吗

#include <bits/stdc++.h>
using namespace std;
#define MAXN 5005
char str1[MAXN],str2[MAXN];
int maxlen[2][MAXN];
int main(){
	int n;
	while(cin>>n){
		for(int i=1;i<=n;i++){
			cin>>str1[i];
		}
		str1[n+1]='/0';
		for(int i=1;i<=n;i++){
			str2[i]=str1[n+1-i];
		}
		memset(maxlen,0,sizeof(maxlen));
		int x=0;
		for(int i=1;i<=n;i++){
			x=1-x;
			for(int j=0;j<=n;j++){
				if(str1[i]==str2[j]){
					maxlen[x][j]=maxlen[1-x][j-1]+1;
					//cout<<maxlen[x][j]<<endl;
				}else{
					int len1=maxlen[x][j-1];
					int len2=maxlen[1-x][j];
					//cout<<len1<<" "<<len2<<endl;
					if(len1>len2){
						maxlen[x][j]=len1;
					}else{
						maxlen[x][j]=len2;
					}
				}
			}
		}
		cout<<n-maxlen[x][n]<<endl;
	}
	return 0;
}

2024/8/9 18:52
加载中...