85分求调
  • 板块CF607B Zuma
  • 楼主dijester
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/15 21:46
  • 上次更新2024/4/16 13:14:13
查看原帖
85分求调
1230895
dijester楼主2024/4/15 21:46
#include<iostream>
#include<cstring>

using namespace std;
int f[1010][1010];

int main()
{
    string s="0";
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
	   int k;
	   cin>>k;
	   s+=to_string(k);
	}

	for(int len=2;len<=n;len++)
	{
		for(int i=1;i+len-1<=n;i++)
		{
			int j=i+len-1;
			if(s[i]==s[j]) f[i][j]=f[i+1][j-1];
			else f[i][j]=min(f[i+1][j],f[i][j-1])+1;
		}
	}
	
	int sum=f[1][n];
	memset(f,0,sizeof f);
	
	
	for(int i=1;i<n;i++)
	{
		f[i][i]=1; //一个字串本身就是回文串 
		if(s[i]==s[i+1]) f[i][i+1]=1;  //两个可能是回文串 
	}
	int count=0;
	for(int len=3;len<=n;len++)
	{
		for(int i=1;i+len-1<=n;i++)
		{
			int j=i+len-1;
			if(s[i]==s[j]&&f[i+1][j-1]==1)
			{
				f[i][j]=1;
				count++;
			}
			 
		}
	}
	if(f[1][n]==1) cout<<1<<endl;
  else	cout<<sum-count+1<<endl;
 } 
2024/4/15 21:46
加载中...