题解 | #红和绿#
红和绿
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) }