UVA11584 简单DP优化
2017-02-15 16:16
148 查看
题意
给出N个字符串,分别求出这N个字符串最少可以分割成多少个回文子串。题解
设dp[i]为1-i个字符最少可以分割成的回文串个数,可得状态转移方程为dp[i]=min(dp[j]+1,dp[i])(I到J为回文串)。但是,在这种情况下,时间复杂度会达到O(N^3),所以我们需要对程序进行优化。优化方式为将从I到J是否为回文串的判断进行预处理,针对每一个字符I,判断该字符加上两边的字符,分别能组成哪些回文串。经过预处理,可将时间复杂度降低到O(N^2)。注意事项
注意初始化dp[0]=0代码
#include <iostream> #include<cstdio> #include<algorithm> #include<cstring> #define INF 1e9 using namespace std; char ch[1010]; int dp[1010]; int re[1010][1010]; int main() { int n; scanf("%d",&n); while(n--) { scanf("%s",ch); int len=strlen(ch); for(int i=len;i>0;i--){ ch[i]=ch[i-1]; } ch[0]=' '; for(int i=0;i<=len;i++){ dp[i]=i; } memset(re,0,sizeof(re)); //预处理回文串 for(int i=1;i<=len;i++){ re[i][i]=1; if(ch[i-1]==ch[i+1]){ for(int j=0;j<=len;j++){ if(i-j<0||i+j>len) break; if(ch[i-j]==ch[i+j]){ re[i-j][i+j]=1; re[i+j][i-j]=1; }else{ break; } } } if(ch[i-1]==ch[i]){ for(int j=0;j<=len;j++){ if(i-j-1<0||i+j>len) break; if(ch[i-1-j]==ch[i+j]){ re[i-j-1][i+j]=1; re[i+j][i-j-1]=1; }else{ break; } } } if(ch[i]==ch[i+1]){ for(int j=0;j<=len;j++){ if(i-j<0||i+j+1>len) break; if(ch[i-j]==ch[i+j+1]){ re[i-j][i+j+1]=1; re[i+j+1][i-j]=1; }else{ break; } } } } dp[0]=0; for(int i=1;i<=len;i++){ for(int j=0;j<len;j++){ if(j<=i){ if(re[j+1][i]){ //printf("%d %d %d\n",i,j+1,dp[j]); dp[i]=min(dp[j]+1,dp[i]); } } } } printf("%d\n",dp[len]); } return 0; }
相关文章推荐
- UVA - 11584 划分字符串的回文串子串; 简单dp
- uva 11584 - Partitioning by Palindromes(简单dp)
- UVA 11584 【简单dp】
- uva 11584 - Partitioning by Palindromes(简单dp)
- 【UVA 11584】【简单dp】Partitioning by Palindromes【给定一个字符串, 问最少分为几部分可使各部分均为回文串】
- UVa 11584 - Partitioning by Palindromes(简单DP)
- UVa 11584 Partitioning by Palindromes (简单DP)
- Uva 11584 Partitioning by Palindromes (简单DP)
- UVa 11584 划分回文串( 简单dp )
- UVA-11584 Partitioning by Palindromes (简单线性DP)
- UVA 11584 (简单DP,类似括号匹配)
- UVa 437 The Tower of Babylon(简单DP)
- uva 1424 简单DP
- hdu 2993 简单斜率优化dp 学了一手变态输入法
- uva116 - Unidirectional TSP(简单DP)
- UVA116----简单的DP,但是输出路径比较坑
- UVa 607 Scheduling Lectures(简单DP)
- UVa 11137 Ingenuous Cubrency(简单DP)
- uva 11584 - Partitioning by Palindromes (dp)
- uva11584 dp最少回文串划分