2022-04-02:你只有1*1、1*2、1*3、1*4,四种规格的砖块。 你想铺满n行m列的区域,规则如下: 1)不管那种规格的砖,都只能横着摆, 比如1*3这种规格的砖,3长度是水平
2022-04-02:你只有11、12、13、14,四种规格的砖块。
你想铺满n行m列的区域,规则如下:
1)不管那种规格的砖,都只能横着摆,
比如1*3这种规格的砖,3长度是水平方向,1长度是竖直方向;
2)会有很多方法铺满整个区域,整块区域哪怕有一点点不一样,就算不同的方法;
3)区域内部(不算区域整体的4条边界),不能有任何砖块的边界线(从上一直贯穿到下)。
返回符合三条规则下,铺满n行m列的区域,有多少种不同的摆放方法。
来自hulu。
答案2022-04-02:
这道题很难想。动态规划。
代码用golang编写。代码如下:
package main
import (
"fmt"
)
func main() {
ret := ways(4, 3)
fmt.Println(ret)
}
var r = []int{0, 1, 2, 4, 8}
func ways(n, m int) int {
if n <= 0 || m <= 1 {
return 1
}
// len[i] = 一共有1行的情况下,列的长度为i的时候有几种摆法(所有,不分合法和非法)
len0 := make([]int, m+1)
for i := 1; i <= getMin(m, 4); i++ {
len0[i] = r[i]
}
for i := 5; i <= m; i++ {
len0[i] = len0[i-1] + len0[i-2] + len0[i-3] + len0[i-4]
}
// any[i] = 一共有n行的情况下,列的长度为i的时候有几种摆法(所有,不分合法和非法)
any := make([]int, m+1)
for i := 1; i <= m; i++ {
// n * i的区域:总共的摆法!不区分合法、不合法
any[i] = power(len0[i], n)
}
// solid[i] = 一共有n行的情况下,列的长度为i的时候有几种合法的摆法
solid := make([]int, m+1)
solid[1] = 1
for i := 2; i <= m; i++ {
invalid := 0
// N * i
// 1) (N * 1 合法) * (N * (i-1) 总共)
// 2) (N * 2 合法) * (N * (i-2) 总共)
// 3) (N * 3 合法) * (N * (i-3) 总共)
//
// j) (N * j 合法) * (N * (i-j) 总共)
for j := 1; j < i; j++ {
invalid += solid[j] * any[i-j]
}
solid[i] = any[i] - invalid
}
return solid[m]
}
func power(base, power int) int {
ans := 1
for power != 0 {
if (power & 1) != 0 {
ans *= base
}
base *= base
power >>= 1
}
return ans
}
func getMin(a, b int) int {
if a < b {
return a
} else {
return b
}
}
执行结果如下:

2022-04-02:你只有1*1、1*2、1*3、1*4,四种规格的砖块。 你想铺满n行m列的区域,规则如下: 1)不管那种规格的砖,都只能横着摆, 比如1*3这种规格的砖,3长度是水平的更多相关文章
- 当使用了相对路径 <base href="<%= basePath %>" /> 后,全局都只能使用相对路径
<% String path = request.getContextPath(); String basePath = request.getScheme() + "://" ...
- 在win7系统下安装把Ubuntu17.04安装在另一个硬盘开机无法进入Ubuntu问题的一种解决办法。【转】
本文转载自:http://blog.csdn.net/u012879090/article/details/74937762 在win7系统下安装把Ubuntu17.04安装在另一个硬盘开机无法进入U ...
- 宣化上人:《四种清净明诲》是照妖镜,把所有妖魔鬼怪都给照现原形了(转自学佛网:http://www.xuefo.net/nr/article55/553478.html)
宣公上人 甘露法雨(顶礼宣公上人) 一般的学者说:<楞严经>是假的,不是佛说的,又有什么考证,又有什么地方记载.这都是他怕<楞严经>,没有办法来应付<楞严经>这个道 ...
- 线程基础知识 04 synchronized锁的四种状态和升级
转https://www.cnblogs.com/mingyueyy/p/13054296.html 1 轻量级锁和重量级锁简要说明 线程调度本来是由操作系统来管理的.现在,操作系统上跑了一个虚拟机J ...
- 转 Activity的四种LaunchMode(写的真心不错,建议大家都看看)
我们今天要讲的是Activity的四种launchMode. launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的 ...
- 读取Properties配置文件, 四种方式都可以得到webroot/WEB-INF/classes这个路径
下面四种方式都可以得到webroot/WEB-INF/classes这个路径,有什么区别,哪种方式最好? String path = this.getClass().getResource(" ...
- 代数余子式的由来/代数余子式为什么-1的系数是ⁱ⁺ʲ?/证明一个n阶行列式,如果其中第i行(或第j列)所有元素除aᵢⱼ外都为零,那么这行列式等于aᵢⱼ与它的代数余子式的乘积/证明行列式按行(列)展开法则:n(n>1)阶行列式等于它任意一行(列)的所有元素与它们对应的代数余子式的乘积的和。
代数余子式的由来/代数余子式为什么-1的系数是ⁱ⁺ʲ?/证明一个n阶行列式,如果其中第i行(或第j列)所有元素除aᵢⱼ外都为零,那么这行列式等于aᵢⱼ与它的代数余子式的乘积/证明行列式按行(列)展开法 ...
- Ubuntu 14.04.02 安装openvswitch-2.3.1
Open vSwitch安装 安装好操作系统 # lsb_release -a LSB Version: core-2.0-amd64:core-2.0-noarch:core-3.0-amd64:c ...
- bat常用命令,转【http://www.cnblogs.com/yplong/archive/2013/04/02/2996550.html】
1.@它的作用是隐藏它后面这一行的命令本身(只能影响当前行).2.echo中文为“反馈”.“回显”的意思.它其实是一个开关命令,就是说它只有两种状态:打开和关闭.于是就有了echo on和echo o ...
- 微信二维码占座 书本水杯板砖都out了
还在用书本.水杯.坐垫.板砖.铁链占座?你OUT了.新学期开学,重大图书馆开通了扫二维码占座功能,同学们只需扫一扫贴在桌子上的二维码,就可以占座.不过,占座有时间限制,如果没有在规定的时间内返回,系统 ...
随机推荐
- 基于TDesign风格的Blazor企业级UI组件库
作为一名Web开发人员,开发前端少不了使用JavaScript,而Blazor就是微软推出的基于.net平台交互式客户 Web UI 框架,可以使用C#替代JavaScript,减少我们的技术栈.降低 ...
- 利用MVC三层架构做一个案例(利用MyBatis实现增删改查)
查询所有 利用昨天学习到的MyBatis知识,再加上servlet页面的跳转, demo1.jsp UserMapper.java(接口) servletDemo.java MyBatisDemo.j ...
- RHEL8使用NMCLI管理网络
使用 NMCLI 配置静态以太网连接 要在命令行上配置以太网连接,请使用 nmcli 工具. 例如,以下流程使用以下设置为 enp7s0 设备创建 NetworkManager 连接配置文件: 静态 ...
- Solon2 自定义 slf4j 日志添加器
本案需要引入已适配的 slf4j 日志框架(solon.logging.simple 或 logback-solon-plugin 或 log4j-solon-plugin). 1.自定义添加器入门 ...
- C/C++ 恨透了 double free or corruption
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/IwSVImp5cOB3gZbaf0YiPw 写过 C/C++ 的都 ...
- STM32F407 学习 (0) 各种外设功能 (上)
本文对正点原子STM32F4探索者的基本功能及外设作最基本的介绍,随笔者本人的学习进程(基本按照正点原子)而不定时更新,起到总结的作用. 一.HAL库编写程序的运行逻辑 HAL库函数(如stm ...
- 电商AARRR模型分析(二)—R语言
AARRR模型可以说是用户运营和业务增长非常重要的模型.模型以用户的生命周期为核心,把增长步骤拆分为5个步骤,分别是:获取用户(Acquisition).用户激活(Activiation).用户留存( ...
- [JavaScript]Promise:异步编程
1 文由 某项目的需求:先要请求API1,再以API1的结果请求API2. var n, a; //var r = window.md5; var r = function (password, us ...
- 5.mapper出错原因
1.总结:前个星期mapper出错,很大原因是自己的项目结构创建有问题,大项目下应该是spring init那种项目结构形式,但是在创建多模块的时候应该是使用moudle形式的项目结构: 所以自己在运 ...
- 四月十七日Java基础知识点
1.默认构造方法:如果class前面有public修饰符,则默认的构造方法也会是public的.由于系统提供的默认构造方法往往不能满足需求,所以用户可以自己定义类的构造方法来满足需要,一旦用户为该类定 ...