nyist oj 37 回文字符串 (动态规划经典)
回文字符串
- 描写叙述
- 所谓回文字符串,就是一个字符串。从左到右读和从右到左读是全然一样的。比方"aba"。当然,我们给你的问题不会再简单到推断一个字符串是不是回文字符串。如今要求你,给你一个字符串,可在任何位置加入字符。最少再加入几个字符,能够使这个字符串成为回文字符串。
- 输入
- 第一行给出整数N(0<N<100)
接下来的N行。每行一个字符串,每一个字符串长度不超过1000. - 输出
- 每行输出所需加入的最少字符数
- 例子输入
-
1
Ab3bd - 例子输出
-
2
- 来源
開始看到这道题的时候,一时想不出用什么非常好的方法来做。看到分类是在动态规划,也大致往这方面想。看了别人的思路。顿时茅塞顿开啊,直接把给定的字符串倒转,然后再和原字符串一起,求他们的最长公共序列,然后再拿字符串的长度减去他们的最长公共序列的长度,得到的就是要加入的最小的字符数。想到了这个地方,这个题目就非常好解啦;直接用LIC水过,状态方程式也和前面做过的题一样;
#include <cstdio>
#include <cstring>
#define max(a,b) a>b?a:b
const int maxn=1001;
char a[maxn],b[maxn];
int dp[maxn][maxn];//昨天晚上把DP的类型设置成了char型,然后提交一直wa,刷屏了。。 。不应该啊!。
int main()
{
int n,i,j,len;
scanf("%d",&n);
while(n--)
{
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));
scanf("%s",a);
len=strlen(a);
for(i=len-1,j=0;i>=0;i--)
b[j++]=a[i];
for(i=1;i<=len;i++)
{
for(j=1;j<=len;j++)
{
if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;//递推关系
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
printf("%d\n",len-dp[len][len]);
}
}看到别人的写的,用了还有一种思路,也是动态规划。可是递推关系有一点不同;有点没看懂;
省去了倒转的环节;
#include<stdio.h>
#include<string.h> int f[1005][1005]; int main()
{
int n;
scanf("%d",&n);
while (n--)
{
char s[1005];
scanf("%s",s);
int k,i,j,l=strlen(s); for (i=0;i<l;++i) f[i][i]=0; for (k=2;k<=l;++k)
{
for (i=0;i<=l-k;++i)
{
int p=i+k-1;
if (s[i]==s[p])
{
f[i][p]=f[i+1][p-1];
}
else
{
f[i][p]=1+(f[i][p-1]<f[i+1][p]? f[i][p-1]:f[i+1][p]);
}
}
} printf("%d\n",f[0][l-1]);
memset(f,0,sizeof(f));
} return 0;
}看到别人的最优代码,内存占用的非常小。值得学习,另一种滚动数组。好像能够节约内存。还没有接触过;
#include<stdio.h>
#include<string.h>
using namespace std;
int m[1000],i,j,t1,t2,len;
char s[1001];
int main() {
int N;
scanf("%d",&N);
while(N--){
scanf("%s",s);
len=strlen(s);
for(i=len-1;i>=0;i--){
m[i]=0;
t1=m[i];
for(j=i+1;j<len;j++){
t2=m[j];
if(s[i]==s[j])
m[j]=t1;
else
m[j]=m[j-1]<m[j]?m[j-1]+1:m[j]+1;
t1=t2;
}
}
printf("%d\n",m[len-1]);
}
}
nyist oj 37 回文字符串 (动态规划经典)的更多相关文章
- nyoj 题目37 回文字符串
回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当 ...
- [NYOJ 37] 回文字符串
回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当 ...
- nyoj 37 回文字符串 【DP】
先反向复制一个新的字符串,然后再找出最长公共子串,在用长度n减去就可以 回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 所谓回文字符串,就是一个字符串,从 ...
- leetcode5 最长回文字符串 动态规划 Manacher法
dp 注意没有声明S不空,处理一下 o(n^2) class Solution { public: string longestPalindrome(string s) { if (s.empty() ...
- nyist oj 311 全然背包 (动态规划经典题)
全然背包 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 直接说题意,全然背包定义有N种物品和一个容量为V的背包.每种物品都有无限件可用.第i种物品的体积是c,价值是 ...
- NYOJ -37回文字符串
这道题看了好大会没有思路,上网一搜发现这么简单,但是我为什么就想不到呢,??就是求和它的逆序之后的字符串最长公共子序列,然后用总的长度减去它就行了.原因是是因为只要是在公共子序列里面,那么他就是对称的 ...
- 【九度OJ】题目1192:回文字符串 解题报告
[九度OJ]题目1192:回文字符串 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1192 题目描述: 给出一个长度不超过1000的 ...
- 九度OJ 1192:回文字符串 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3807 解决:1778 题目描述: 给出一个长度不超过1000的字符串,判断它是不是回文(顺读,逆读均相同)的. 输入: 输入包括一行字符串 ...
- 九度oj 题目1192:回文字符串
题目1192:回文字符串 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4391 解决:2082 题目描述: 给出一个长度不超过1000的字符串,判断它是不是回文(顺读,逆读均相同)的. ...
随机推荐
- 后缀数组基本问题QAQ
以下题目均来自罗穗骞的论文... No.1最长公共前缀 最长公共前缀: 题目: 给定一个字符串,询问某两个后缀的最长公共前缀. 分析: 某两个后缀的最长公共前缀就是区间height最小值,转化为RMQ ...
- os模块 文件操作
下面的方法可以在python程序里直接生成文件到系统路径(windows环境下测试): <<<<<<要注意字符串前面要加字母r>>>>> ...
- Linux centos 时间不同步 date 和 hwclock 时间不一致
Linux centos 时间不同步 date 和 hwclock 网站有两台服务器,date 查看差3分钟 在应用 APP倒计时 与 直播,时时性较强的功能应用中 请求服务器后返回的服务器时间与数据 ...
- 聚类kmeans算法在yolov3中的应用
yolov3 kmeans yolov3在做boundingbox预测的时候,用到了anchor boxes.这个anchors的含义即最有可能的object的width,height.事先通过聚类得 ...
- 洛谷——P1713 麦当劳叔叔的难题
P1713 麦当劳叔叔的难题 题目描述 话说我们铭铭小朋友成功的回答了爸爸的问题,自然少不了要去索要些奖励,抠门的爸爸一看报纸,嘿,门口的麦当劳在搞活动,还有免费午餐哦,不过前提条件:得正确回答麦当劳 ...
- Akka之Circuit Breaker
这周在项目中遇到了一个错误,就是Circuit Breaker time out.以前没有接触过,因此学习了下akka的断路器. 一.为什么使用Circuit Breaker 断路器是为了防止分布式系 ...
- Linux(二) 常用命令
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debianaa 安装VMware或VirtualBox虚拟机 ...
- Storyboards Tutorial 03
这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...
- go --socket通讯(TCP服务端与客户端的实现)
这篇文章主要使用Go语言实现一个简单的TCP服务器和客户端.服务器和客户端之间的协议是 ECHO, 这个RFC 862定义的一个简单协议.为什么说这个协议很简单呢, 这是因为服务器只需把收到的客户端的 ...
- PHP页面跳转几种实现方法
转载自冠威博客 [ http://www.guanwei.org/ ]本文链接地址:http://www.guanwei.org/post/PHPnotes/04/php-redirect-metho ...