dp 回文串
来源:互联网 发布:c语言次方怎么写 编辑:程序博客网 时间:2024/06/16 01:35
给你一个字符串问最小切多少刀使得所得子串均为回文串
dp[i]表示前i个最少勺需要多少刀才能满足要求 O(n^2)
#define LL long long
#include<bits/stdc++.h>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#include<bits/stdc++.h>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[1000];
string s;
bool ispld(int j , int i)
{
while(j<i)
{
if(s[j]!=s[i]) return false;
j++;
i--;
}
return true;
}
string s;
bool ispld(int j , int i)
{
while(j<i)
{
if(s[j]!=s[i]) return false;
j++;
i--;
}
return true;
}
int main()
{
{
cin>>s;
int len=s.size();
dp[0]=-1;
for(int i=1;i<=s.size();i++)
{
dp[i]=i-1;
}
for(int i=2;i<=s.size();i++)
{
for(int j=i-1;j>=0;j--)
{
if(ispld(j,i-1))
{
//for(int k=j;k<=i;k++) cout<<s[k];
dp[i]=min(dp[i],dp[j]+1);
}
}
}
printf("%d",dp[len]);
return 0;
}
int len=s.size();
dp[0]=-1;
for(int i=1;i<=s.size();i++)
{
dp[i]=i-1;
}
for(int i=2;i<=s.size();i++)
{
for(int j=i-1;j>=0;j--)
{
if(ispld(j,i-1))
{
//for(int k=j;k<=i;k++) cout<<s[k];
dp[i]=min(dp[i],dp[j]+1);
}
}
}
printf("%d",dp[len]);
return 0;
}
阅读全文
0 0
- poj3280(回文串,DP)
- DP与回文串
- dp 回文串
- DP求最长回文串
- poj 1159(回文串dp)
- poj 3280-回文串-DP
- uva10453(回文串dp)
- 回文串的组合 DP
- 回文串最小划分 dp
- uva11584 dp最少回文串划分
- poj 3280 Cheapest Palindrome ---(DP 回文串)
- CodeForces 245H (dp+回文串)
- 构造回文串(简单DP)
- String to Palindrome+uva+回文串dp
- 1159--Palindrome(dp:回文串变形2)
- Again Palindromes+uva+回文串dp
- Make Palindrome+uva+回文串dp
- 回文串数dp(uvaAgain Palindromes )
- NDK项目实战—高仿360手机助手之卸载监听
- php模拟post提交请求,调用接口
- 记录一下,自己的学习路程
- JQ JS 改变value值不触发change事件
- XML文档解析
- dp 回文串
- 多次点击提交,发送多次任务
- js学习-数组
- nodejs特点理解
- Spring in Anction:Spring AOP 小记
- windows下部署Hadoop2.7.4
- 机器学习实战(一):Apriori算法实现关联分析
- goodbye,CSDN,goodbye,曾经年少轻狂
- Android基础篇——创建一个Android工程