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;
    }
    

     

  • 相关阅读:
    通过异常处理错误-2
    通过异常处理错误-1
    线程池
    Synchronized
    持有对象-4
    持有对象-3
    持有对象-2 迭代器深入理解
    ServletContextListener
    持有对象-1
    行为参数化
  • 原文地址:https://www.cnblogs.com/clanguageweaver/p/6710611.html
Copyright © 2011-2022 走看看