题目

思路:动态规划

  • 状态:即栅栏的索引位置和 是否与上一个同色, 两种状态;

  • dp定义dp[i][0] 指 第 i 个栅栏与第 i-1个栅栏同色的颜色可能性,dp[i][1]指第 i 个栅栏与上一个不同色的颜色可能性

  • 选择
    此题没有求最大 或者 最小,而是列出所有的可能性!
    根据题意,dp[i][0]即和上一个同色,由于同一个颜色只能相邻两次,那么第 i-1个栅栏注定不能和上一个(i-2)同色! 所以 dp[i][0]=dp[i-1][1]
    dp[i][1]指 i 和 i-1不同色,那么 i-1位置的栅栏 既可以与i-2同色也可以与i-2不同色,且此时 i栅栏可以有 k-1种颜色可选;

  • base case
    从 i=1 开始算,dp[1][0]=0 即第一次不可能和上次相同;
    dp[1][1]=k 即第一次有k种可能性;

注意: 计算的是可能性的总和,所以结果是dp[n][0] + dp[n][1] ,而不是算的最大值or最小值;

public static void main(String[] args){Scanner in=new Scanner(System.in);int n=in.nextInt();int k=in.nextInt();if(k==1){if(n>0 && n<=2){System.out.println(1);}else{System.out.println(0);}}else {// dp定义int[][] dp = new int[n + 1][2];// base case// 0不算dp[0][0] = 0;dp[0][1] = 0;// 第一个和前面相同的可能性0dp[1][0] = 0;// 第一个和前面不同的可能性kdp[1][1] = k;for (int i = 2; i <= n; i++) { // 遍历栅栏索引// 和之前相同可能性1, 第i-1次只能是和上次不同dp[i][0] = dp[i - 1][1];// 和之前不同:要么第i-1此也不同 or 第i-1次与上次相同,然后再乘 k-1种可能性dp[i][1] = (dp[i - 1][1] + dp[i - 1][0]) * (k - 1);}int r = dp[n][0] + dp[n][1];System.out.println(r);}}

LeetCode 276:栅栏涂色相关推荐

  1. Leetcode 276.栅栏涂色

    Time: 20190904 Type: Easy 考察:动态规划 题目描述 有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,每个栅栏柱可以用其中一种颜色进行上色. 你需要给所有栅栏柱上色,并且保 ...

  2. LeetCode 276. 栅栏涂色(DP)

    文章目录 1. 题目 2. 解题 2.1 DP超时解 2.2 DP解 1. 题目 有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,每个栅栏柱可以用其中一种颜色进行上色. 你需要给所有栅栏柱上色,并 ...

  3. ​LeetCode刷题实战276:栅栏涂色

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. leetcode276. 栅栏涂色

    有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,每个栅栏柱可以用其中一种颜色进行上色. 你需要给所有栅栏柱上色,并且保证其中相邻的栅栏柱 最多连续两个 颜色相同.然后,返回所有有效涂色的方案数. ...

  5. LeetCode-276. 栅栏涂色

    有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,每个栅栏柱可以用其中一种颜色进行上色. 你需要给所有栅栏柱上色,并且保证其中相邻的栅栏柱 最多连续两个 颜色相同.然后,返回所有有效涂色的方案数. ...

  6. LeetCode 1473. 给房子涂色 III(DP)

    1. 题目 在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n ). 有的房子去年夏天已经涂过颜色了,所以这些房子不需要被重新涂色. 我们将连续相同颜 ...

  7. LeetCode 1411. 给 N x 3 网格图涂色的方案数(数学)

    1. 题目 你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同). 给你网格图的行数 n ...

  8. leetcode 5383. 给 N x 3 网格图涂色的方案数

    leetcode 5383. 给 N x 3 网格图涂色的方案数 来源:力扣(LeetCode) 你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保 ...

  9. leetcode 给N x 3网络图涂色的方案数

    1.题目详情       leetcode 给N x 3网络图涂色的方案数 你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就 ...

最新文章

  1. MySQL表注释和字段注释
  2. 数据中心“泡澡”散热,阿里云启用全球最大液冷数据中心支撑双11
  3. 【实操】路由选择工具ACL
  4. pmcaff智囊团开通啦!能人大拿集聚地,名额有限,速度哟~
  5. Vagrant的用法
  6. 08.remote_cluster配置
  7. magento二次开发的基本步骤分享
  8. Opencv--Mat属性step,size,step1,elemSize,elemSize1
  9. Hibernate ,Mybatis 区别,以及各自的一级,二级缓存理解
  10. hdu 5148 cities 树形DP
  11. linux虚拟机怎么显示桌面,虚拟机中如何开启Linux的3d特效桌面?
  12. 查看日志tail命令
  13. POJ 2777 Count Color (线段树区间修改 + 状态压缩)
  14. 141.PHP 对象赋值
  15. 使用java语言实现将10进制转化为2进制
  16. redis php 使用实例
  17. 透视投影时相机的参数设置
  18. 【技术贴】Windows图片和传真查看器打开图片慢,正在生成预览的解决办法!
  19. 线性代数基础知识点回顾与总结(一):行列式与矩阵
  20. QGraphicsView使用详解

热门文章

  1. 中文分词-转载3_一个北京程序员
  2. 如何进行接口参数化?
  3. 29岁vivo员工吐槽:整理出这份8万字Java性能优化实战解析
  4. 自动驾驶(十一)---------泰勒展开式、雅克比矩阵、主成分分析
  5. 带你玩转Github
  6. [Linux] 10. shell编程基础《updating》
  7. matlab snapnow,任意倾斜椭圆方程的画法.pdf
  8. python 2048游戏的设计_Python练习:100行代码实现一个简易的2048游戏
  9. python按日期爬取b站弹幕 2.0版
  10. 常见电脑硬件故障有哪些?如何解决?~~~显卡故障