题解 | #红和绿#

红和绿

https://www.nowcoder.com/practice/69606208a7734ae0895724cfb951aef8

//第一眼看到这个题,就觉得会不会用动态规划,反正不会了就再用递归直接暴力解无所谓
//然后想动态策略,
//假设我前面三个值的最优解n已经存在,那我第四个值能不能用前边的最优解?(以小见大)
//当我第四个是G的时候,首先确定前三个最优解肯定是符合题目要求规律的,所以如果是G,那就啥都不变直接继承前三个最优解n
//如果第四个是R,有一种方案就是把R变成G来符合要求,那样第四个最优解有可能是n+1
//但是有一种可能,我不变R,我把前边的数全部变成R来符合要求,这种方法最少次数就是有多少G,就把前边多少G变成R
//最优解也有可能是numG,就是前三个中G的数量
//所以第四个是R的最优解为min(numG,n+1)就是变R和不变R把前边都变R两种可能里最小的那个
package main
import (     "bufio"     "fmt"     "os"
)
func main(){
    input := bufio.NewScanner(os.Stdin)
    input.Scan()
    data:=input.Text()
    minnum:=0
    numG:=0
    if string(data[0])=="G"{
        numG = numG+1
    }
    for _,i:=range data[1:]{
        if string(i)=="G"{
            numG = numG+1
        }
        if string(i)=="R"{
            if minnum+1>numG{
               minnum = numG 
            }else{
                minnum = minnum+1
            }
        }
        
    }
    fmt.Print(minnum)
}



全部评论

相关推荐

03-16 22:00
武汉大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务