诗意的题目 秋叶收藏集

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

猜你喜欢

转载自blog.csdn.net/weixin_47741017/article/details/108961502