bailian4122:切割回文(区间dp)
2017-08-07 16:25
288 查看
dp[i]表示把前i个都变成回文串最少需要切割的次数。每次枚举在j后面切一刀,暴力判断(j+1,i)是否是回文,如果是,那就是要切割dp[j]+1次。取最小即可。
#include <cstdio> #include <cstring> int const N=1010; int dp ,m; char s ; bool ispalindrome(int st,int end){ while(st<end){ if(s[st]!=s[end]) return false;st++;end--; } return true; } inline int min(int x,int y){return x<y?x:y;} int main(){ // freopen("a.in","r",stdin); scanf("%d",&m); while(m--){ scanf("%s",s+1); int len=strlen(s+1); for(int i=1;i<=len;++i){ dp[i]=(ispalindrome(1,i))?0:i-1; for(int j=1;j<i;++j)//在j后面切一刀 if(ispalindrome(j+1,i)) dp[i]=min(dp[i],dp[j]+1); } printf("%d\n",dp[len]); } return 0; }
相关文章推荐
- 切割回文(区间dp)
- nyoj 1023 还是回文(区间DP)
- UVa 10617 Again Palindrome(回文 区间dp)
- 【LeetCode131-140】切割回文(值得再看一遍DP),切割词汇(需要看看,DP)
- DP17 最少回文切割次数 Palindrome Partitioning @geeksforgeeks
- POJ 3280 Cheapest Palindrome(回文,区间DP)
- DP之钢管切割,最长回文字符串,最长公共子串
- nyoj 1023 还是回文(区间DP)
- D - 还是回文(区间dp)
- nyoj1023还是回文【区间dp】
- hihocoder 1149 : 回文字符序列(区间dp)
- HDU 4632 CF 245H 区间DP(回文)
- uva 10003 一根木棍上有n个切割点 4000 每次选一个点切割,求总切割费用最小 区间DP
- nyoj 1023 还是回文(区间DP)
- nyoj 1023 还是回文(区间DP)
- 【51nod 1092】 回文字符串(区间DP)
- 题目2 : 回文字符序列(区间DP)
- 51NOD1092—— 回文字符串(区间dp)
- nyoj 1023 还是回文 (区间dp加贪心)
- nyoj 1023 还是回文(区间DP)