请求hack
查看原帖
请求hack
205585
FighterQ楼主2023/11/4 22:46
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

const int N=55;
const int INF=0x3f3f3f3f;

int n;
char s[N];
int f[N][N];
int ne[N],la[N];

int dfs(int l,int r)
{
    if(l==r)return 1;
    if(l==r-1)return s[l]==s[r]?1:2;

    if(f[l][r]!=-1)return f[l][r];

    int res=INF;

    if(s[l]==s[r])
    {
        res=1;
        for(int i=l;i<=r;++i)
        {
            if(s[i]==s[l])continue;
            int j=i;
            while(j<r && s[j+1]!=s[l])++j;
            res+=dfs(i,j);
            i=j;
        }
    }

    for(int i=l;i<r;++i)
        res=min(res,dfs(l,i)+dfs(i+1,r));
    return f[l][r]=res;
}
int main()
{
    scanf("%s",s+1);
    n=strlen(s+1);

    s[0]='#';
    //s[n+1]='#';
    for(int i=1;i<=n;++i)
    {
        for(int j=i+1;j<=n+1;++j)
            if(s[j]!=s[i]){ne[i]=j;break;}
        // for(int j=i-1;j>=0;--j)
        //     if(s[j]!=s[i]){la[i]=j;break;}
    }

    memset(f,-1,sizeof f);
    printf("%d\n",dfs(1,n));

    return 0;
}

不知道这样做为什么不对

2023/11/4 22:46
加载中...