LightOJ - 1044 Palindrome Partitioning(DP)
2015-10-28 22:52
281 查看
题目大意:给你一个字符串,要求你对字符串进行划分,使得划分出来的子串都是回文串,且子串数量达到最小
解题思路:用dp[i]表示前i个字符划分成回文串,需要划分成多少个部分
接着枚举j,如果[i,j]回文,那么dp[i] = min(dp[i], dp[j - 1] + 1)
解题思路:用dp[i]表示前i个字符划分成回文串,需要划分成多少个部分
接着枚举j,如果[i,j]回文,那么dp[i] = min(dp[i], dp[j - 1] + 1)
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int N = 1010; char str ; int dp ; int cas = 1; bool judge(int i, int j) { while (i <= j) { if (str[i] != str[j]) return false; i++; j--; } return true; } void solve() { scanf("%s", str); int len = strlen(str); for (int i = 0; i < len; i++) { dp[i] = INF; for (int j = 0; j <= i; j++) { if (judge(j, i)) { if (j == 0) dp[i] = 1; else dp[i] = min(dp[i], dp[j - 1] + 1); } } } printf("Case %d: %d\n", cas++, dp[len - 1]); } int main() { int test; scanf("%d", &test); while (test--) solve(); return 0; }
相关文章推荐
- JS中 !=、== 、!==、===的用法和区别
- 自然对数e
- 项目冲刺-第一天
- AngularJs angular.element
- ajaxFileupload多文件上传
- 罗马数字转换成阿拉伯数字
- 10.28NOIP模拟总结
- LightOJ - 1037 Agent 47(状压DP)
- EffectiveC#02--仅在对基类进行强制更新时才使用new修饰符
- 【NOIP】10.28集训总结
- [LintCode] Subsets
- [BZOJ3751][NOIP2014] 解方程
- Meteor 简介
- Linux 装B之作酷炫小工具
- ios9有哪些新特性?
- uft飞机订票系统参数化
- 如何注册免费的dns
- 8421BCD编码-20151027
- AFNetworking
- Redis简介及3.0.2编译安装