美文网首页
笔记04:栅栏染色问题

笔记04:栅栏染色问题

作者: Wayne_Dream | 来源:发表于2018-11-04 13:39 被阅读24次

这是一题来自Google的面试题,属于easy类题,其中的解题思路是运用动态规划的思想。

这种给定一个规则,计算有多少种结果的题目一般都是动态规划,因为我们可以从这个规则中得到递推式。根据题意,不能有超过连续两根柱子是一个颜色,也就意味着第三根柱子要么根第一个柱子不是一个颜色,要么跟第二根柱子不是一个颜色。如果不是同一个颜色,计算可能性的时候就要去掉之前的颜色,也就是k-1种可能性。假设dp[1]是第一根柱子及之前涂色的可能性数量,dp[2]是第二根柱子及之前涂色的可能性数量,则dp[3]=(k-1)dp[1] + (k-1)dp[2]。

递推式有了,下面再讨论下base情况,所有柱子中第一根涂色的方式有k中,第二根涂色的方式则是k*k,因为第二根柱子可以和第一根一样。
下面是c++代码:

class Solution {
public:
    int numWays(int n, int k) {
        // Write your code here
        vector<int> dp = {0, k, k * k, 0};
        if (n <= 2)
            return dp[n];
        if (k == 1)
            return 0;
        for (int i = 3; i <= n; ++i) {
            dp[3] = (k - 1) * (dp[1] + dp[2]);
            dp[1] = dp[2];
            dp[2] = dp[3];
        }
        return dp[3];
    }
};

相关文章

  • 笔记04:栅栏染色问题

    这是一题来自Google的面试题,属于easy类题,其中的解题思路是运用动态规划的思想。 这种给定一个规则,计算有...

  • 栅栏染色

    题目 我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。必须保证不存在超过2个相邻的柱子颜色相同(...

  • LintCode 栅栏染色

    题目 我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。必须保证任意两个相邻的柱子颜色不同,求有多...

  • 乐趣

    文/落花聴雨 用小手渲染色彩,用画笔记录美好。

  • 染色做的不好

    除了染色不好外,山石造型有点问题

  • 目录

    羊皮笔记01 羊皮笔记02 羊皮笔记03 羊皮笔记04 羊皮笔记05 羊皮笔记06 羊皮笔记07

  • iView Table使用render方式 引入iconfont

    2019-04-11笔记 前端渣渣在参考大佬的代码下,一上午就解决了这个问题,对自己无语了。。。,记笔记。。。 其...

  • 革兰氏染色试剂盒,解决细菌染色问题

    来聊聊细菌界的这两大染色法:革兰氏染色VS抗酸染色。 一、革兰氏染色(Gram stain) 根据革兰氏染色反应不...

  • 染色体组和植物n倍体的判定规律

    写在前面,本文为本人学习笔记,根据个人理解,做出自己认为合适的解释 一、染色体组的概念 染色体组指细胞中的...

  • 针织物的染色方法和纱线染色设备

    一、针织物染色方法 纺织品的染色方法按形态不同主要有纤维染色、纱线染色、织物染色和成衣染色。针织物可以采用纱线染色...

网友评论

      本文标题:笔记04:栅栏染色问题

      本文链接:https://www.haomeiwen.com/subject/jdvrxqtx.html