Paint Fence

要点:

  • 这题是求number of ways,如果是相邻不相同颜色,那么就trivial了:k*(k-1)^(n-1)。所以这里no more than two adjacent fence posts就是不能连续出现3个相同颜色的。
  • 注意这题的解序列都是连续的,所以dp表示的就是以当前fence结束的情况。
  • 这题要用两个dp variables:same:表示最近两个posts是相同颜色,diff:表示最近两个posts是不同color。why?首先这两种情况是exclusive的,所以结果是same+diff。另外由于三个不相连,所以下一个diff是依赖于上一步的same和diff的,而下一步same就是上一步的diff。这样就有了递推式了。
  • 为什么要分开而不能只优化dp[i]?dp[i-2]/dp[i-1]的情况是不明的,没法确定当前的颜色。
  • 以前还见过道min cost的题,这题只是相邻的不同色。因为每种颜色的cost的非对称性,dp需要记录每种颜色上一步的min cost,从而再得到下一步。同样,因为结果是连续的,所以最后就是几种颜色中最小的那个 http://pastebin.com/PS4RPzLY

https://repl.it/CfFI/1

错误点:

  • xrange(2, n) or xrange(3, n+1)都可以
  • python的same, diff可以同时更新,右边的全是old值,没有更新顺序依赖
# There is a fence with n posts, each post can be painted with one of the k colors.

# You have to paint all the posts such that no more than two adjacent fence posts have the same color.

# Return the total number of ways you can paint the fence.

# Note:
# n and k are non-negative integers. # Hide Company Tags Google
# Hide Tags Dynamic Programming
# Hide Similar Problems (E) House Robber (M) House Robber II (M) Paint House (H) Paint House II class Solution(object):
def numWays(self, n, k):
"""
:type n: int
:type k: int
:rtype: int
"""
if n==0 or k==0: return 0
if n==1: return k
same, diff = k, k*(k-1)
for i in xrange(2, n): # error: not 3 but 2
same, diff = diff, same*(k-1)+diff*(k-1)
return same+diff sol = Solution()
assert sol.numWays(3, 2)==6
assert sol.numWays(3, 1)==0
assert sol.numWays(2, 2)==4

边工作边刷题:70天一遍leetcode: day 85-2的更多相关文章

  1. 边工作边刷题:70天一遍leetcode: day 85

    Find the Celebrity 要点: 这题从solution反过来想比较好:loop through n同时maintain一个candidate:如果cand认识某个i,那么modify c ...

  2. 边工作边刷题:70天一遍leetcode: day 89

    Word Break I/II 现在看都是小case题了,一遍过了.注意这题不是np complete,dp解的time complexity可以是O(n^2) or O(nm) (取决于inner ...

  3. 边工作边刷题:70天一遍leetcode: day 77

    Paint House I/II 要点:这题要区分房子编号i和颜色编号k:目标是某个颜色,所以min的list是上一个房子编号中所有其他颜色+当前颜色的cost https://repl.it/Chw ...

  4. 边工作边刷题:70天一遍leetcode: day 78

    Graph Valid Tree 要点:本身题不难,关键是这题涉及几道关联题目,要清楚之间的差别和关联才能解类似题:isTree就比isCycle多了检查连通性,所以这一系列题从结构上分以下三部分 g ...

  5. 边工作边刷题:70天一遍leetcode: day 85-3

    Zigzag Iterator 要点: 实际不是zigzag而是纵向访问 这题可以扩展到k个list,也可以扩展到只给iterator而不给list.结构上没什么区别,iterator的hasNext ...

  6. 边工作边刷题:70天一遍leetcode: day 101

    dp/recursion的方式和是不是game无关,和game本身的规则有关:flip game不累加值,只需要一个boolean就可以.coin in a line II是从一个方向上选取,所以1d ...

  7. 边工作边刷题:70天一遍leetcode: day 1

    (今日完成:Two Sum, Add Two Numbers, Longest Substring Without Repeating Characters, Median of Two Sorted ...

  8. 边工作边刷题:70天一遍leetcode: day 70

    Design Phone Directory 要点:坑爹的一题,扩展的话类似LRU,但是本题的accept解直接一个set搞定 https://repl.it/Cu0j # Design a Phon ...

  9. 边工作边刷题:70天一遍leetcode: day 71-3

    Two Sum I/II/III 要点:都是简单题,III就要注意如果value-num==num的情况,所以要count,并且count>1 https://repl.it/CrZG 错误点: ...

  10. 边工作边刷题:70天一遍leetcode: day 71-2

    One Edit Distance 要点:有两种解法要考虑:已知长度和未知长度(比如只给个iterator) 已知长度:最好不要用if/else在最外面分情况,而是loop在外,用err记录misma ...

随机推荐

  1. EffectiveJava——复合优先于继承

    继承时实现代码重用的重要手段,但它并非永远是完成这项工作的最佳工具,不恰当的使用会导致程序变得很脆弱,当然,在同一个程序员的控制下,使用继承会变的非常安全.想到了很有名的一句话,你永远不知道你的用户是 ...

  2. 中国快递包裹总量的预测-基于SARIMA模型

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  3. phpcms v9 升级视频云问题推荐位不能添加

    因为使用的是v9的早期版本,后来升级的时候没敢升级数据库,直接使用了老的数据库结构,造成[推荐位]添加不能使用,报告没有thumb列. 查看数据库果然没有,没办法要么添加相关的列,要么禁用上传缩略图. ...

  4. 调用另一个Activity

    <转>调用另一个Activity Intent对象的使用 范例说明 前一个范例介绍了如何运用切换Layout的方式,进行手机页面间的转换.如果要转换的页面并不单只是背景.颜色或文字内容的不 ...

  5. 【GOF23设计模式】解释器模式 & 访问者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_解释器模式.访问者模式.数学表达式动态解析库式 1.解释器模式Interpreter  2.访问者模式Visitor 

  6. 【GOF23设计模式】中介者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_中介者模式.同事协作类.内部类实现 package com.test.mediator; /** * 同事类的接口 */ ...

  7. 2004-输入一个百分制的成绩t,将其转换成对应的等级

    ,具体转换规则如下: 90~100为A; 80~89为B; 70~79为C; 60~69为D; 0~59为E; 如果输入数据不在0~100范围内,请输出一行:“Score is error!”. 这题 ...

  8. andriod 资源文件之存取操作

    来自:http://blog.csdn.net/jianghuiquan/article/details/8569235 <?xml version="1.0" encodi ...

  9. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

  10. IOS NSOperation&NSOperationQueue

    NSOperation与NSOperationQueue的基本理论如下:      1.NSOperationQueue代表一个FIFO的队列,它负责管理系统提交的多个NSOperation,NSOp ...