/*
动态规划照亮世界!!!
bool类型的hw[i][j]数组表示字符串第i到j位是否为回文子串
dp[i]表示0到i位最少分割串数
*/
#include<bits/stdc++.h>
using namespace std;
string st;
int dp[1005];
bool hw[1005][1005]; 
int main()
{
    ios::sync_with_stdio(false);
    cin>>st;
    for(int i=0;i<st.size();i++)
        hw[i][i]=true;
    dp[0]=1;
    for(int i=1;i<st.size();i++)
    {
        dp[i]=dp[i-1]+1;
        for(int j=0;j<i;j++)
        {
            if(st[i]==st[j]&&(i-j<2||hw[j+1][i-1]))
            {
                hw[j][i]=true;
                if(j==0) dp[i]=1;
                else dp[i]=min(dp[i],dp[j-1]+1);
            }
        }
    }
    cout<<dp[st.size()-1];
    return 0;
}

1 条评论

  • @ 2024-05-19 18:18:18
    #include <bits/stdc++.h>
    using namespace std;
    int dp[1005];
    bool check(string s,int l,int r)
    {
        while(l<r)
        {
            if(s[l]!=s[r])
            {
                return 0;
            }
            l++;
            r--;
        }
        return 1;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        string s;
        cin>>s;
        for(int i=0;i<s.size();i++)
        {
            dp[i]=dp[i-1]+1;
            for(int j=1;j<i;j++)
            {
                if(check(s,j,i))
                {
                    dp[i]=min(dp[i],dp[j-1]+1);
                }
            }
                
        }
        cout<<dp[s.size()-1];
        return 0;
    }
    
    

    为啥只对一个点啊。。。。。。(明明也是dp)
    帮我看一下QVQ

  • 1

信息

ID
2675
难度
8
分类
(无)
标签
递交数
28
已通过
5
通过率
18%
上传者