红和绿

Posted fzuhyj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了红和绿相关的知识,希望对你有一定的参考价值。

 

 

思路:用递归,考虑所有可能情况。  当前‘G‘后‘R‘时,要么将R前面所有的连续的G变为R,要么将R变为G,分别计算其更改后的字符串和更改次数,进入下次递归。

注意点:要考虑全染为一色的情况,和不全染为一色(用递归解决,注意此时开头必为红色,结尾必为绿色,需要判断)

#include<iostream>
#include<string>
using namespace std;
int minn;
int len;
void dfs(int pre,int back,int sum,string str){
    if(back >= len){
        if(minn==0){
            minn = sum;
            return;
        }else{
            if(minn>sum){
                minn = sum;
            }
            return;
        }
    }
    if(str[pre]==G && str[back]==R){    
        //要么将R前面所有的连续的G变为R,要么将R变为G
        string temp = str;
        int t=sum;
        for(int i=pre;i>=0;i--){//R前面所有的连续的G变为R
            if(temp[i] == G){
                temp[i] = R;
                t++;
            }else{
                break;
            }
        }
        dfs(pre+2,back+2,t,temp);
        temp = str;
        temp[back] = G;
        dfs(pre+1,back+1,sum+1,temp);            //R变为G
    }else{
        pre++;
        back++;
        dfs(pre,back,sum,str);
    }
}
int main()
{
    string s;
    cin>>s;
    len = s.length();
    int sum = 0;
    int t1=0,t2=0;
    for(int i=0;i<len;i++){
        if(s[i]==G){
            t1++;
        }else{
            t2++;
        }
    }
    minn = t1<t2?t1:t2;
    
    if(s[0]==G){
        s[0] = R;
        sum++;
    }
    if(s[len-1]==R){
        s[len-1] = G;
        sum++;
    }
    dfs(0,1,sum,s);
    cout<<minn;
    return 0;
}

 

 

其他题解:(处理所有可能情况)
对长度为n的字符串,对其每个位置对进行处理,把该位置左侧全染为R,再把该位置右侧全染为G,计算需要染的次数,获取最小次数即可

#include <stdio.h>
#include <string.h>
#define N 50
int main()
{
    char ch[N];
    scanf("%s",ch);
    int n,i,j,count=0;
    n=strlen(ch);
    int min=n;
    for(i=0;i<n;i++)
    {
        count=0;
        for(j=0;j<i;j++)
            if(ch[j]==G)
                count++;
        for(j=i;j<n;j++)
            if(ch[j]==R)
                count++;
        if(count<min)
            min=count;
    }
    printf("%d\n",min);
    return 0;
}

 

以上是关于红和绿的主要内容,如果未能解决你的问题,请参考以下文章

poj 3734

粒子滤波相关内容

IDEA 其他基本配置

IDEA 其他基本配置

word文档里出现红线和绿线是啥意思?

刚自己把原来电脑机械硬盘拆到现在电脑 怎样把机械硬盘分区 黑的和绿的是啥意思?在线等 急急