[蓝桥杯]各自刷油漆Python3满分解法
[蓝桥杯]各自刷油漆Python3满分解法
文章目录
- [蓝桥杯]各自刷油漆Python3满分解法
- 前言
- 一、动态规划算法
- 二、本题思路
- 1.观察解的特征
- 2.设计递归方程
- 3.注意边界特殊情况
- 三、代码
- 四、总结
前言
本人小白一枚,最近在准备蓝桥杯。将解题思路进行记录
一、动态规划算法
本题是一道动态规划算分的题目。动态规划有两个特征,第一个特征数是我们在构造解的过程为自底向上的进行构建。第二个特征是每一个问题的解都可以分解成多个相同性质的更小规模问题的解的组合。
二、本题思路
1.观察解的特征
如上图所示,我们可以总结出对于从第i列中的一个格子出发,其油漆刷的方法为 t e m p 1 = ∑ i = 1 n − 2 b [ i + 1 ] ∗ 2 ∗ a [ n − 1 − i ] + b [ n − i ] ∗ 2 ∗ a [ i ] temp1=\sum _{i=1}^{n-2} b[i+1]*2*a[n-1-i]+b[n-i]*2*a[i] temp1=i=1∑n−2b[i+1]∗2∗a[n−1−i]+b[n−i]∗2∗a[i]
另外再加上四个角出发的情况 t e m p 2 = 4 × a [ n ] temp2=4\times a[n] temp2=4×a[n]
结果为 temp1+temp2
2.设计递归方程
从图中,我们可以发现对于i>=3,
b [ i ] = 2 × b [ i − 1 ] a [ i ] = b [ i ] + 2 × a [ i − 1 ] + 4 × a [ i − 2 ] b[i]=2\times b[i-1] \\ a[i]=b[i]+2\times a[i-1]+4\times a[i-2] b[i]=2×b[i−1]a[i]=b[i]+2×a[i−1]+4×a[i−2]
3.注意边界特殊情况
边界情况就是n=0,n=1,n=2属于特殊情况。
另外结果处当i=0和i=n-1时也是特殊情况,需要特别处理。
三、代码
class Solution:#输入n,要求我们输出所有的刷漆的方法数目def plaidPaint(self,n):#a[i]表示i列的刷漆的以一个角为出发点的方法数目,b[i]表示在i列的格子数目中,从一个最外侧的端点到同一侧的另外的那个格子的方法数目if n==1:return 1a=[0]*(n+1)b=[0]*(n+1)a[1]=1b[1]=1a[2]=6b[2]=2 for i in range(3,n+1):b[i]=2*b[i-1]a[i]=b[i]+2*a[i-1]+4*a[i-2]if n==1:return 1ans=4*a[n] #这边就直接是乘以2的问题for i in range(1,n-1):ans+=(b[i+1]*2*a[n-1-i]+b[n-i]*2*a[i])*2 return ans%1000000007if __name__ == "__main__":solution = Solutionn=int(input())result=solution.plaidPaint(solution,n)print(result)
四、总结
这道题目其实代码量很少,关键就在于我们能否按照严格的步骤进行代码的编写。我在这道题目上花费了不少的时间,问题出现在二、3中的没有注意边界的特殊情况。题目本来的做法应该是 r e s u l t = 4 × a [ n ] + 2 × ∑ 1 ≤ i ≤ n − 2 ( b [ i + 1 ] × 2 × a [ n − i − 1 ] + b [ n − i ] × 2 × a [ i ] ) result=4\times a[n]+2 \times \sum _{1\leq i\leq n-2}(b[i+1] \times 2\times a[n-i-1]+b[n-i] \times 2 \times a[i]) result=4×a[n]+2×1≤i≤n−2∑(b[i+1]×2×a[n−i−1]+b[n−i]×2×a[i])
然而,我却在一开始写成了
r e s u l t = 2 × ∑ 0 ≤ i ≤ n − 1 ( b [ i + 1 ] × 2 × a [ n − i − 1 ] + b [ n − i ] × 2 × a [ i ] ) result=2 \times \sum _{0\leq i\leq n-1}(b[i+1] \times 2\times a[n-i-1]+b[n-i] \times 2 \times a[i]) result=2×0≤i≤n−1∑(b[i+1]×2×a[n−i−1]+b[n−i]×2×a[i])
这两个完全不一样,因为在四个角的计算值不相等。在边界情况讨论的时候不要怕麻烦,要将所有的特殊情况情况都考虑到了
[蓝桥杯]各自刷油漆Python3满分解法相关推荐
- [蓝桥杯]横向打印二叉树 Python满分解法
[蓝桥杯]横向打印二叉树 Python满分解法 #树的结点类定义 class Node:def __init__(self,left=0,right=0,w=0,line=0,leng=0):self ...
- 蓝桥杯 格子刷油漆 动态规划//
问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动 ...
- 蓝桥杯:旅行家的预算 贪心解法
蓝桥杯:旅行家的预算 贪心解法 问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距 ...
- 蓝桥杯三月刷题 第10天
[蓝桥杯三月刷题 第X天]-- 文章目录
- [蓝桥杯单片机]刷题笔记—客观题—2019年省赛真题
本人最近在备战蓝桥杯的单片机赛道 需要多多刷题历练 这一系列的文章会跟大家一起计算.一起翻手册找答案 (在之前的文章中有详细记录的只会简单解释,不懂的自己往前翻) 一方面帮助自己记住刷过的题 另一方面 ...
- 蓝桥杯备考-刷题之路-动态规划算法(DP算法)Part1
之前在刷力扣的时候就是浑浑噩噩的,照着评论区的答案写了一遍就万事大吉了,没有深度思考过.这次备考蓝桥杯看到DP算法的第一道题就不会,更难受的是看答案了依然完全不理解,所以决心把DP算法一次弄懂. 开始 ...
- 蓝桥杯2017初赛-油漆面积-枚举
题目描述 X星球的一批考古机器人正在一片废墟上考古.该区域的地面坚硬如石.平整如镜. 管理人员为方便,建立了标准的直角坐标系. 经过各种测量,每个机器人都会报告一个或多个矩形区域,作为优先考古的区域. ...
- 蓝桥杯Python刷题
目录 一 入门练习 1 A+B问题 2 序列求和 3 圆的面积 4 Fibonacci数列 二 基础练习 1 闰年判断 2 01字串 3 字母图形 4 数列特征 5 查找整数 6 杨辉三角形 7 特殊 ...
- 蓝桥杯真题 购物单 EXCEl解法详细步骤
一.题目 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦, ...
最新文章
- 机器学习数学 — 初等函数求导
- Python零散知识点记录
- vs2010下release版本调试设置
- springmvc简述
- 通信原理-随相数字信号的最佳接收
- addr2line探秘(没有core怎么办)
- Delphi 10.2.3发布
- htpasswd用法
- 卡尔曼滤波和粒子滤波最直白的解释
- 银行自动化监控系统应用
- java8 Stream接口简单使用
- 专访 Livid:程序员值得花时间一看!
- 手机便签怎么对待办分类文件夹加密
- 基本社会里模型的源码分析
- 大学计算机基础超详细知识点(高手总结),大学计算机基础超详细知识点(高手总结)免费-...
- 什么样的面试更有效?
- @RunWith的作用
- day21组合III电话号码的字母组合
- html自动拨打电话,javascript之网页点击直接拨打电话和发送短信
- 输入密码三次,简单程序