动态规划(划分成回文串,uva 11584)
来源:互联网 发布:淘宝调货时间 编辑:程序博客网 时间:2024/05/17 06:55
对每个位子进行DP时要先初始化一下他的值,这是就要考虑到有没有在接下来的循环中没能考虑到的边界情况,如果有,就在这些没有考虑到的情况中选一个最优解最为初始值,情况很少,往往判断一下就OK。如果没有遗漏的情况,那就给他赋一个一定会被替换的值,比如求最小值,你就给他赋INF,求最大值,你就给他赋-1或-INF。但要保证这个值一定会被替换,而且不会被认为是某个正确的结果。
#include<bits/stdc++.h>using namespace std;char str[1010];bool is[1010][1010];int dp[1010];int main(){ int t; scanf("%d",&t); while(t--) { memset(is,0,sizeof(is)); scanf("%s",str+1); int len=strlen(str+1); for(int i=1;i<=len;i++) { int l,r; l=r=i; is[l][r]=1; while(l-1>=1&&r+1<=len&&str[l-1]==str[r+1]) { l--; r++; is[l][r]=1; } } for(int i=1;i<=len-1;i++) { int l=i; int r=i+1; if(str[l]==str[r]) is[l][r]=1; else continue; while(l-1>=1&&r+1<=len&&str[l-1]==str[r+1]) { l--; r++; is[l][r]=1; } } for(int i=1;i<=len;i++) { if(is[1][i]) dp[i]=1; else dp[i]=i; for(int j=1;j<i;j++) if(is[j+1][i]) dp[i]=min(dp[i],dp[j]+1); } printf("%d\n",dp[len]); } return 0;}
0 0
- 动态规划(划分成回文串,uva 11584)
- uva 划分成回文串 11584 题解
- uva 11584 划分成回文串
- UVA 11584 Partitioning by Palindromes 划分成回文串(DP + 预处理)
- UVA 11584 或 BNU20002 划分成回文串 DP求一个串最少能划分成多少个文回串
- uva11584 划分成回文串
- uva11584 划分成回文串
- uva11584 划分成回文串 线性dp
- 例题9-7 划分成回文串 UVa11584
- 回文串-动态规划
- LeetCode(Palindrome partition 2) 求将一个字符串划分成回文子串 需要分成的段数最少是多少
- uva 11584 计算最少回文串数 动态规划 lrj-P276
- UVA 10739 String to Palindrome (增删字符将非回文串串变身回文串,动态规划dp )
- Palindrome (动态规划) 构成回文串
- 回文串划分(动态规划)
- 添加回文串(动态规划)
- 回文子串(动态规划)
- uva 11584 把字符串分成最少的回文段
- 归并排序
- yii2无限分类实例-非数据库递归
- Service Lifecycle
- IOS跳转到AppStore应用详情页面方法
- 设计模式--FlyWeight 模式
- 动态规划(划分成回文串,uva 11584)
- 安卓版本号
- Java学习:继承
- 动画基础
- 五、devtmpfs文件系统 创建设备节点
- java class文件结构
- 归并排序
- strstr()实现
- Android发布