南洋理工oj 37

思路:

输入字符串S;设sum要插入字符的最小值

从两端出发前端x=0;后端y=L-1;

首先,如果S[0]!=S[L-1],此时要么在最前面添字符,要么在末尾添字符,sum++;(这是无法避免的)

然后,S[0]=S[L-1],此时前端x +1,后端y-1;

注意递归出口:前段>后端(x>y),此时为0;

递归算法最重要的是先明确函数的参数含义以及函数实现的功能。这题是实现在pos=x到pos=y这段字符要添加的最小字符数

还有数组保存递归结果的模板

#include<stdio.h>
#include<string.h>
#define min(a,b) (a<b?a:b)
char a[1001];
int f[1001][1001];
int dp(int x,int y)
{
	if(f[x][y]!=-1)
	return f[x][y];
	if(x>=y)
	{
		f[x][y]=0;
		return f[x][y];
	}
	if(a[x]==a[y])
	{
		f[x][y]=dp(x+1,y-1);
		return f[x][y];
	}
	f[x][y]=min(dp(x+1,y),dp(x,y-1))+1;
	return f[x][y];
}
int main()
{
	int N;
	scanf("%d",&N);
	while(N--)
	{
		scanf("%s",a);
		memset(f,-1,sizeof(f));
		printf("%d\n",dp(0,strlen(a)-1));
	}
	return 0;
}
时间: 2024-10-13 21:53:53

南洋理工oj 37的相关文章

nyist oj 37 回文字符串 (动态规划经典)

回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串.现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串. 输入 第一行给出整数N(0<N<100) 接下来的N行,每行一个字符串,每个字符串长度不超过1000. 输出 每行输出所需添加的最少字符

二叉树的建立与遍历(山东理工OJ)

数据结构实验之二叉树的建立与遍历 题目描述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度. 输入 输入一个长度小于50个字符的字符串. 输出 输出共有4行: 第1行输出中序遍历序列: 第2行输出后序遍历序列: 第3行输出叶子节点个数: 第4行输出二叉树深度. 示例输入 abc,,de,g,,f,,, 示例输出 cbegdfa cgefdba 3 5 #include <iost

众数问题(山东理工OJ)

题目描写叙述 给定含有n个元素的多重集合S,每一个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数. 比如,S={1,2,2,2,3.5}.多重集S的众数是2,其重数为3. 对于给定的由n 个自然数组成的多重集S.计算S的众数及其重数. 输入 输入数据的第1行是多重集S中元素个数n(n<1300000):接下来的n行中,每行有一个最多含有5位数字的自然数,. 输出 输出数据的第1行给出众数,第2行是重数. 演示样例输入 6 1 2 2 2 3 5 演示样例输出 2 3 #i

哈理工OJ P2320:OX

题目链接:OX 题意 :给出一个3X3的黑白棋棋盘,棋盘上有若干黑白子,再给出下一个下的人,问下一个下的人能否赢 分析:考虑到只有39种状态,故用一个数保存目前棋盘的状态,记为value,再枚举空位DFS,每次 DFS先判该状态是否已到达(剪枝),再拆分状态用c[3][3]储存,判断是否有赢的状态,最后遍历 棋盘寻找空位,若有则下,value储存状态,再DFS下去,注意返回c[i][j]清零 判断胜负平的条件如下: 若有一个状态可以到达必败点,则该点必胜,返回1 若有一个状态可以到达平局点,则该

南阳理工OJ之素数求和问题

---------------------------------------------- AC代码: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 preprocess(); 8 9 Scanner sc=new Scanner(System.in); 10 11 int times=sc.nextInt(); 12 while(time

哈理工 oj 2122 旅行(map + 最短路dij算法)

旅行 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 18(6 users) Total Accepted: 3(3 users) Rating: Special Judge: No Description "04.24,和Sakura去东京天空树,世界上最暖和的地方天空树的顶上. " "04.26.和Sakura去明治神宫.有人在那里举办婚礼." "04.25.和Sakura去迪士尼.鬼屋非

哈理工 oj——队列列列列!!!!!

队列列列列!!!!! Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 337(148 users) Total Accepted: 154(142 users) Rating: Special Judge: No Description xuxu完成了栈的实验要求后,他又很是开心,刚要出去liuda, biaobiao突然问道老师让做的队列的那个实验你写完了么,xuxu顿时大呼悲哉....他给忘记了,怎么办..明天就要上交实验报告了

哈理工OJ 1328

感觉其实可以不水的. 1 //好像是一道特别水的小学数学题.但是我确实看了很久有试了几个样例才懂得.T_T 2 // 先判断是不是素数.如果是素数的话.An-1一定不等于An.否则的话. 3 // 继续找如果有一对因子是互素的 就说明是相等的.否则不是. 1和n这一对不算. 4 5 #include <stdio.h> 6 #include <string.h> 7 #include <iostream> 8 using namespace std; 9 10 int

经典DP 嵌套矩形 (南洋理工ACM—16)

本来是个很水的DP,结果被自己的代码习惯给打败了 代码: 1 #include<iostream> 2 #include<stdlib.h> 3 #include<string.h> 4 5 using namespace std; 6 7 typedef struct rectangle 8 { 9 int x; 10 int y; 11 }Rectangle; 12 13 Rectangle a[1002]; 14 int map[1002][1002]; 15 i