【UVA 11584】【简单dp】Partitioning by Palindromes【给定一个字符串, 问最少分为几部分可使各部分均为回文串】

传送门:http://vjudge.net/contest/141412#problem/A  (密码cd)

题意:给定一个字符串, 问最少分为几部分可使各部分均为回文串


思路:

 1 dp[i] 表示以i结尾的最少分割数

 2 dp[i] = min(dp[j-] + 1 && j-i为回文)

复杂度O(n^3),这题数据好像比较水不需要紫书上说的预处理


代码:

#include <bits/stdc++.h>
using  namespace  std;
const int N=1e3+10;

int dp[N];
char s[N];

bool ok(int x, int y){
    while(x<=y){
        if(s[x]!=s[y])return false;
        x++; y--;
    }
    return true;
}

int  main(){
    // ios::sync_with_stdio(false);
    int T;
    scanf("%d", &T);
    while(T--){
       scanf("%s", s+1);
       int n=strlen(s+1);
       for(int i=1; i<=n; i++){
            dp[i]=i;
            for(int j=1; j<=i; j++){
                if(ok(j, i))dp[i]=min(dp[i], dp[j-1]+1);
            }
        }
        printf("%d\n", dp[n]);
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值