ACM 动态规划初步 Partitioning by Palindromes
来源:互联网 发布:美洽电脑软件下载 编辑:程序博客网 时间:2024/04/29 19:37
题目大意:给你一些字符串,让你求这些字符串所能分割成的回文字符串的最小数量,比如aaa,为1;abc,只能一个一个字符拆分,所以是3;aaabdccd,为3;等等。
结题思路:用动态规划解决这个问题。一个一个字符加进去,看看能否构成回文,如果能构成回文,该状态下的最优解是多少,如果一直不能,则该状态下的最优解为前者状态的最优解情况下再加上一。这样每个循环一遍就可以得出问题的答案。
代码如下:
#include<iostream>#include<string>#include<cstring>#include<algorithm>using namespace std;int dp[1002];//存放某个状态时候的最优解数据 char num[1002];//存放字符 int check(int l,int r)//定义检查的函数 {int f=1;for(int i=0;i<(r-l)/2+1;i++){if(num[l+i]!=num[r-i]){f=0;break;}}return f;}int main(){int N,M;string s;int i,j,sum=0,tem;int max=100000;for(;cin>>N;){while(N--){num[0]='0';cin>>s;int len=s.length();for(i=1;i<=len;i++)num[i]=s[i-1];for(i=1;i<=len;i++){int minx=max;for(j=0;j<i;j++){if (check(j+1,i)){//如果检查通过,则在该状态下的最优解上加一作为目前的最优解; tem=dp[j]+1;}else {tem=dp[j]+i-j;}//如果没有通过,则考虑最坏的情况会是怎么样; //cout<<"@@@@@"<<tem<<endl;minx=min(minx,tem);//一直取最小的,这样就能保证整个搜索下来得到的是最优解 //cout<<"#####"<<minx<<endl;}dp[i]=minx;//该状态下的最优解 //cout<<dp[i]<<endl;}cout<<dp[len]<<endl;}}}
- ACM 动态规划初步 Partitioning by Palindromes
- UVA11584 - Partitioning by Palindromes - 动态规划
- UVa11584 - Partitioning by Palindromes(动态规划)
- 【动态规划】[UVa11584]Partitioning by Palindromes
- UVA11584[Partitioning by Palindromes] 动态规划
- uva 11584 Partitioning by Palindromes (动态规划)
- ACM DP Partitioning by Palindromes
- UVA 11584 Partitioning by Palindromes 动态规划 入门
- 【UVA】11584-Partitioning by Palindromes(动态规划)
- UVa - 11854 - Partitioning by Palindromes (线性动态规划)
- Partitioning by Palindromes
- Partitioning by Palindromes
- UVa11584-Partitioning by Palindromes
- uva11584 Partitioning by Palindromes
- UVa11584 Partitioning by Palindromes
- Partitioning by Palindromes
- Partitioning by Palindromes uva111584
- uva11584 Partitioning by Palindromes
- ListView item设置间距无效问题
- android基础篇------------java基础(4) (面向对象程序设计)
- 认识js中的function和this
- 飞跃的心
- poj3667 线段树+区间合并
- ACM 动态规划初步 Partitioning by Palindromes
- hdu 2013 蟠桃记
- Aho-Corasick算法
- POJ3071--Football
- libsvm-3.11(matlab)
- 一个以前没有注意的问题:java构造函数的执行顺序
- POI入门教程
- 花了两个小时做的-- 算不算久呢? 事件监听器 计算器java版 GUI
- 内排序Java实现