Skip to content

Instantly share code, notes, and snippets.

@govo
Created November 27, 2020 02:51
Show Gist options
  • Select an option

  • Save govo/cd8c7e1be13ed555d10b1ee784c7575c to your computer and use it in GitHub Desktop.

Select an option

Save govo/cd8c7e1be13ed555d10b1ee784c7575c to your computer and use it in GitHub Desktop.
//动态规划,不在乎过程,只在乎结果,后面依赖前面结果
//最后一步:到结尾
//子问题:目标是ryr形式,翻牌3次,dp[0]翻r,dp[1]翻y,dp[2]翻r
//状态转移方程:
// dp[0][i] = dp[0][i-1] + incRed
// dp[1][i] = Math.min(dp[0][i - 1], dp[1][i - 1]) + incYellow
// dp[2][i] = Math.min(dp[1][i - 1], dp[2][i - 1]) + incRed
//初始条件:
// dp[0][0] = leaves[0] === 'r' ? 0 : 1
// dp[1][0] = Number.MAX_VALUE
// dp[2][0] = Number.MAX_VALUE
// dp[2][1] = Number.MAX_VALUE
//计算顺序:0 到 length
var minimumOperations = function (leaves) {
let dp = []
dp[0] = []
dp[1] = []
dp[2] = []
dp[0][0] = leaves[0]==='r' ? 0 : 1
dp[1][0] = Number.MAX_VALUE
dp[2][0] = Number.MAX_VALUE
dp[2][1] = Number.MAX_VALUE
let l = leaves.length
for (let i = 1; i < l; i++) {
let incRed = leaves[i] === 'y' ? 1: 0
let incYellow = leaves[i] === 'y' ? 0:1
dp[0][i] = dp[0][i-1] + incRed
dp[1][i] = Math.min(dp[0][i - 1], dp[1][i - 1]) + incYellow
if(i>=2){
dp[2][i] = Math.min(dp[1][i - 1], dp[2][i - 1]) + incRed
}
}
return dp[2][l-1]
};
console.log(minimumOperations("rrryyyrryyyrr"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment