zoukankan      html  css  js  c++  java
  • lintcode-514-栅栏染色

    514-栅栏染色

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

    注意事项

    n和k都是非负整数

    样例

    n = 3, k = 2, return 6

    post 1, post 2, post 3
    way1 0 0 1
    way2 0 1 0
    way3 0 1 1
    way4 1 0 0
    way5 1 0 1
    way6 1 1 0

    标签

    动态规划

    思路

    使用动态规划,用一维数组 dp[i] 记录前 i 个柱子的染色方案。染色时需要注意的是最多允许 2 颗相邻的柱子具有相同的颜色。

    • 第 1 颗柱子染色方案为色彩总数 k,因为没有相邻的柱子
    • 第 2 颗柱子染色方案为色彩总数 k * k,因为只有 2 颗柱子,相邻柱子颜色可以相同
    • 第 3 颗及其之后的柱子,染色方案为色彩总数 dp[i-2] * (k-1) + dp[i-1] * (k-1),因为若此柱子要染得颜色与上一颗柱子相同,则一定不能与上上颗相同;若与上一颗不同,则无需考虑其他柱子

    code

    class Solution {
    public:
        /*
         * @param n: non-negative integer, n posts
         * @param k: non-negative integer, k colors
         * @return: an integer, the total number of ways
         */
        int numWays(int n, int k) {
            // write your code here
            if (n <= 0 || k <= 0) {
                return 0;
            }
            vector<int> dp(n + 1, 0);
            dp[1] = k;
            dp[2] = k * k;
            for (int i = 3; i <= n; i++) {
                dp[i] = dp[i - 1] * (k - 1) + dp[i - 2] * (k - 1);
            }
            return dp[n];
        }
    };
    
  • 相关阅读:
    部署nginx服务
    mysql主从配置
    LNMP+WordPress博客搭建
    CIFS(Samba)服务的使用
    NFS服务的使用
    LVM逻辑卷
    FTP学习
    文件处理+生成器
    内置函数
    Python3
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7428868.html
Copyright © 2011-2022 走看看