[LintCode 514] 栅栏染色(Python)
来源:互联网 发布:淘宝的支付方式有哪些 编辑:程序博客网 时间:2024/06/05 10:10
题目描述
我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。
必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案。(n和k都是非负整数)
样例
n = 3, k = 2, return 6
post 1 post 2 post 3way 1 0 0 1way 2 0 1 0way 3 0 1 1way 4 1 0 0way 5 1 0 1way 6 1 1 0
思路
动态规划问题。设
- 和第
i−1 个柱子颜色相同:那么i,i−1 的颜色只要和i−2 不同就可以了,共有k−1 个颜色,对应的方案数为(k−1)∗f(i−2) - 和第
i−1 个柱子颜色不同:那么i的颜色只要和i−1 不同就可以了,共有k−1 个颜色,对应的方案数为(k−1)∗f(i−1)
综上
初始条件:
代码
class Solution: """ @param: n: non-negative integer, n posts @param: k: non-negative integer, k colors @return: an integer, the total number of ways """ def numWays(self, n, k): # write your code here if n == 0: return 0 # 初始条件 if n <= 2: return k ** n # 在栅栏数多于2个时,如果只有1个颜色,则方案数为0。需要注意这个情况的处理。 if k == 1: return 0 p1 = k p2 = k * k for i in range(3, n + 1): tmp = p2 p2 = p2 * (k - 1) + p1 * (k - 1) p1 = tmp return p2
复杂度分析
时间复杂度
阅读全文
0 0
- [LintCode 514] 栅栏染色(Python)
- lintcode python 代码 514 栅栏染色
- lintcode python 代码 514 栅栏染色
- LintCode:栅栏染色
- lintcode栅栏染色
- LintCode之栅栏染色
- LintCode 栅栏染色
- LintCode: 栅栏染色
- 栅栏染色-LintCode
- 栅栏染色-LintCode
- lintcode 栅栏染色
- LintCode 栅栏染色
- lintcode paint-fence 栅栏染色
- lintcode——栅栏染色
- 栅栏染色
- 栅栏染色
- 栅栏染色
- 栅栏染色
- 球场大佬【NOIP2017提高组A组模拟8.17】
- JQuery插件实现下拉复选框和后台mybatis接受处理数据
- Carbon Data 文件结构
- 码农不识贝叶斯,虽知数据也枉然
- LaunchMode and Flag
- [LintCode 514] 栅栏染色(Python)
- 远程访问SQL server
- 每天一点积累(一五)--类继承的加载
- Linux 的多线程编程的高效开发经验
- 类与对象和方法
- Android 反编译后修改 APK 中文件再进行打包签名(应用完整性校验)
- 股市总结
- 数字图像处理——灰度级、动态范围、对比度
- RMQ with Shifts