zoukankan      html  css  js  c++  java
  • 动态规划-计数-514. 栅栏染色

    2020-04-27 21:15:58

    问题描述:

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

    样例

    例 1:

    输入: n=3, k=2  
    输出: 6
    Explanation:
              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
    

    例 2:

    输入: n=2, k=2  
    输出: 4
    Explanation:
              post 1,   post 2
        way1    0         0       
        way2    0         1            
        way3    1         0          
        way4    1         1       
    

    注意事项

    nk都是非负整数

    问题求解:

    按最后两个柱子颜色是否相同进行划分。

    若最后两个颜色不同共(k - 1) * dp[i - 1]种,若最后两个颜色相同共(k - 1) * dp[i - 2]种。

    时间复杂度:O(n)

        public int numWays(int n, int k) {
            if (n == 1) return k;
            if (n == 2) return k * k;
            int[] dp = new int[n + 1];
            dp[1] = k;
            dp[2] = k * k;
            for (int i = 3; i <= n; i++) dp[i] = (k - 1) * dp[i - 2] + (k - 1) * dp[i - 1];
            return dp[n];
        }
    

      

  • 相关阅读:
    二分图最大匹配
    Problems about trees
    Hackerrank Going to the Office
    多校题解
    HDU #2966 In case of failure
    K-D Tree
    UOJ #10 pyx的难题
    bzoj 1090 字符串折叠
    uva 1347 旅行
    bzoj 1059 矩阵游戏
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12790230.html
Copyright © 2011-2022 走看看