zoukankan      html  css  js  c++  java
  • 南洋理工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
    ",dp(0,strlen(a)-1));
    	}
    	return 0;
    }
    

     

  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    教你搭建SpringSecurity3框架(附源码)
    浅谈数据库联合查询
  • 原文地址:https://www.cnblogs.com/clanguageweaver/p/6710611.html
Copyright © 2011-2022 走看看