1044 - Palindrome Partitioning(区间DP)

题目大意:
给你一个字符串,问这个字符串最少有多少个回文串。
区间DP直接搞
 
 
 
复制代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL;
const int INF = 1e9+7;
const int MAXN = 1055;
int dp[MAXN][MAXN];
bool P[MAXN][MAXN];
char str[MAXN];
int DFS(int L,int R)
{
    if(dp[L][R] != -1)
        return dp[L][R];
    if(L >= R)
        return dp[L][R] = 1;

    dp[L][R] = INF;
    if(P[L][R]) dp[L][R] = 1;
    for(int i=L; i<=R; i++)
    {
        if(P[L][i])
            dp[L][R] = min(dp[L][R], 1 + DFS(i+1,R));
    }
    return dp[L][R];
}

bool ok(int L,int R)
{
    for(int i=L,j=R; i<=j; i++, j--)
    {
        if(str[i] != str[j])
            return false;
    }
    return true;
}


int main()
{
    int T, cas = 1;
    scanf("%d", &T);
    while(T --)
    {
        memset(dp, -1, sizeof(dp));
        scanf("%s", str);
        int len = strlen(str) - 1;
        for(int i=0; i<=len; i++)
        for(int j=i; j<=len; j++)
            P[i][j] = ok(i, j);

        printf("Case %d: %d\n",cas ++, DFS(0, len) );
    }

    return 0;
}
复制代码

 

posted @   向前走丶不回首  阅读(140)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
点击右上角即可分享
微信分享提示