https://leetcode-cn.com/problems/UlBDOe/solution/qiu-xie-shou-cang-ji-by-leetcode-solution/ 这个动态规划还是有点东西的,虽然挺简单的。看懂了之后自己写的。不过还是自己想不太出来。状态转移的话,好歹有一点初始的思路了。 有个小细节啊,毕竟我是直接写的,发现因为定义了INT_MAX 嘛,所以如果你后面给他操作的话,会int类型overflow。所以-1的话无伤大雅。 思路写在代码注释里面。
class Solution { public: int minimumOperations(string leaves) { int n=leaves.size(); vector<vector<int>> dp(n,vector<int>(3)); //dp[0]全都变红色,dp[1]全都变红黄,dp[2]全都变红黄红 dp[0][0]=(leaves[0]=='y'); dp[0][1]=INT_MAX; dp[0][2]=INT_MAX; dp[1][2]=INT_MAX-1; for(int i=1; i<n; i++) { int IsRed=(leaves[i]=='r'); int IsYellow=(leaves[i]=='y'); dp[i][0]=dp[i-1][0]+(!IsRed); dp[i][1]=min(dp[i-1][1],dp[i-1][0])+(!IsYellow); if(i>=2) { int a=dp[i-1][0]+1+IsYellow;//全红加一个红,只需要加一 int b=dp[i-1][1]+IsYellow;//红黄加一个红 int c=dp[i-1][2]+IsYellow;//答案 dp[i][2]=min(min(a,b),c); } } return dp[n-1][2]; } };