求助
查看原帖
求助
426737
Little_corn楼主2023/1/13 17:26

代码:

#include<bits/stdc++.h>
using namespace std;

const int INF=(1<<30);

int t,len;
string s;
bool a[1001][1001];
int dpp[1001];

void init_pd()
{
    for(int i=0;i<len;i++)
    {
        int l,r;
        l=r=i;
        a[l][r]=true;
        if(s[l-1]!=s[r+1])r++;
        while(l>=0&&r<len&&s[l]==s[r])
        {
            a[l][r]=true;
            l--,r++;
        }
    }
    return;
}

int dp(int i)
{
    if(i==-1)return 0;
    int& ans=dpp[i];
    if(ans)return ans;
    ans=INF;
    for(int j=0;j<=i;j++)
    {
        if(a[j][i])ans=min(ans,dp(j-1)+1);
    }
    return ans;
}

int main()
{
    //freopen("cc.in","r",stdin);
    cin>>t;
    while(t--)
    {
        cin>>s;
        len=s.size();
        memset(a,false,sizeof(a));
        memset(dpp,0,sizeof(dpp));
        init_pd();
        if(t!=0)cout<<dp(len-1)<<endl;
        else cout<<dp(len-1);
    }

    return 0;
}

2023/1/13 17:26
加载中...