UVA 10453 - Make Palindrome(DP)
2012-07-19 17:23
260 查看
题目链接
今天多校第一场,我酱油了。。。哎,最近做DP,完全没有感觉啊,这个破题,C RE无数次,用C++过了。。。好假。。
记录路径的本身 和逆序的最长公共子序。
今天多校第一场,我酱油了。。。哎,最近做DP,完全没有感觉啊,这个破题,C RE无数次,用C++过了。。。好假。。
记录路径的本身 和逆序的最长公共子序。
#include <stdio.h> #include <string.h> int p[1001][1001]; int main() { char str[3001]; int i,j,len; while(gets(str)!=0) { memset(p,0,sizeof(p)); len = strlen(str); for(i = 1; i <= len; i ++) { for(j = 1; j <= len; j ++) { if(str[i-1] == str[len-j]) p[i][j] = p[i-1][j-1]+1; else if(str[i-1] != str[len-j]) { if(p[i-1][j] < p[i][j-1]) p[i][j] = p[i][j-1]; else p[i][j] = p[i-1][j]; } } } printf("%d ",len-p[len][len]); for(i = len,j = len;;) { if(str[i-1] == str[len-j]&&i >= 1&&j >=1) { printf("%c",str[i-1]); i --;j --; } else if(p[i][j] == p[i][j-1]&&j >= 1) { printf("%c",str[len-j]); j --; } else if(p[i][j] == p[i-1][j]&&i >= 1) { printf("%c",str[i-1]); i --; } else if(i == 0&&j == 0) break; } printf("\n"); } return 0; }
相关文章推荐
- Make Palindrome - UVa 10453 dp
- uva_10453 - Make Palindrome(普通DP)
- uva 10453 Make Palindrome (区间DP + 递归输出)
- uva 10453 - Make Palindrome(dp)
- uva 10453 - Make Palindrome (区间dp,记忆化搜索)
- uva 10453 - Make Palindrome (区间dp,记忆化搜索)
- UVA - 10453 Make Palindrome 区间DP
- UVA 10453-Make Palindrome(DP)
- UVA 题目10453 Make Palindrome(区间DP,打印路径)
- uva 10453 - Make Palindrome(dp)
- 区间DP UVA 10453 Make Palindrome
- uva 10453 Make Palindrome(dp,最小回文生成)
- uva 10453 - Make Palindrome(dp, 记录路径)
- UVA 10453 Make Palindrome(区间简单DP)
- uva 10453 Make Palindrome(区间DP->回文字符串的最小生成)
- uva 10453 - Make Palindrome(dp)
- uva 10453 Make Palindrome(DP)
- UVA 10453 Make Palindrome(区间dp-补全回文串+打印结果)
- UVa 10453 Make Palindrome(简单DP)
- uva 10453 - Make Palindrome