首页 > 代码库 > Light oj 1044 - Palindrome Partitioning(区间dp)
Light oj 1044 - Palindrome Partitioning(区间dp)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1044
dp[i][j]表示i到j直接的最小回文区间个数,直接看代码
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 1e3 + 5; 4 int dp[N][N], inf = 1e9; 5 char str[N]; 6 bool judge(int l, int r) { 7 for(int i = l - 1, j = r - 1; i < j; ++i, --j) { 8 if(str[i] != str[j]) 9 return false;10 }11 return true;12 }13 int dfs(int l, int r) {14 if(l == r)15 return dp[l][l] = 1;16 if(l > r)17 return 0;18 if(dp[l][r] < inf)19 return dp[l][r];20 int ans = inf;21 for(int i = r; i >= l; --i) {22 if(judge(i, r))23 ans = min(ans, dfs(l, i - 1) + 1);24 }25 return dp[l][r] = ans;26 }27 28 int main()29 {30 int t;31 scanf("%d", &t);32 for(int ca = 1; ca <= t; ++ca) {33 scanf("%s", str);34 int len = strlen(str);35 for(int i = 1; i <= len; ++i) {36 for(int j = 1; j <= len; ++j) {37 dp[i][j] = inf;38 }39 }40 printf("Case %d: %d\n",ca, dfs(1, len));41 }42 return 0;43 }
Light oj 1044 - Palindrome Partitioning(区间dp)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。