国庆回来开始做题
动态规划,这个10月要每日一题动态规划吗?上个月做了好多回溯,收获满满希望这个月可以好好练习动规。
f[i][0]开始i是红色 f[i][0] = f[i-1][0] + isyellow;上一个是红色,当前是黄色需要修改+1
f[i][1]中间i是黄色 f[i][1] = min(f[i-1][0],f[i-1][1]) + isred;i是黄色上一个是红色或者黄色,当前是红色+1
f[i][2]最后i是红色,每种颜色必须要有一个则必须大于2
return f[leaves.size() - 1][2]; 就是当j = 2的时候前面需要做些什么操作
class Solution { public: int minimumOperations(string leaves) { int n = leaves.size(); vector<vector<int>>f(n,vector<int>(3)); f[0][0] = (leaves[0] == 'y');//f[0][0]第一个是红色 0 f[0][1] = f[0][2] = f[1][2] = INT_MAX; for(int i = 1; i < leaves.size(); i++) { int isyellow = (leaves[i] == 'y'); int isred = (leaves[i] == 'r'); f[i][0] = f[i-1][0] + isyellow; f[i][1] = min(f[i-1][0],f[i-1][1]) + isred; if(i >= 2) { f[i][2] = min(f[i-1][1],f[i-1][2]) + isyellow; } } return f[leaves.size() - 1][2]; } };
