zoukankan      html  css  js  c++  java
  • leetcode 5241. 铺瓷砖

    题意:

    你是一位施工队的工长,根据设计师的要求准备为一套设计风格独特的房子进行室内装修。

    房子的客厅大小为 n x m,为保持极简的风格,需要使用尽可能少的 正方形 瓷砖来铺盖地面。

    假设正方形瓷砖的规格不限,边长都是整数。

    请你帮设计师计算一下,最少需要用到多少块方形瓷砖?

    示例一:

    输入:n = 2, m = 3
    输出:3
    解释:3 块地砖就可以铺满卧室。
         21x1 地砖
         12x2 地砖

    示例二:

    输入:n = 5, m = 8
    输出:5

    示例三:

    输入:n = 11, m = 13
    输出:6

    提示:

    • 1 <= n <= 13
    • 1 <= m <= 13

    思路:

    思路:我们设dp[i][j]:表示组成一个i*j大小的矩形所需要的最小方案数,我们考虑将当前块分三种情况化为更小的块进行求解:

    • 1.竖直切一刀 
    • 2.水平切一刀 
    • 3.不规则切割,将一个矩形分成5块,其中中间那块是1*1的

    其中前两种情况非常好理解,第三种是为什么呢? 为什么中间一定是1*1大小的呢?

    首先我们知道这道题的n和m很小,只有13这么大,你在草稿纸上画一画就会发现,其实根本不会出现中间出现类似于2*2大小的块使其无法水平或者竖直分割。

     1 class Solution {
     2 public:
     3     int dp[15][15];
     4     int tilingRectangle(int n, int m) {
     5         memset(dp,0x3f,sizeof(dp));
     6         for(int i=0;i<=m;i++)dp[0][i]=0;
     7         for(int i=0;i<=n;i++)dp[i][0]=0;
     8         for(int i=1;i<=n;i++){
     9             for(int j=1;j<=m;j++){
    10                 if(i==j)dp[i][j]=min(dp[i][j],1);
    11                 for(int k=1;k<j;k++)dp[i][j]=min(dp[i][j],dp[i][k]+dp[i][j-k]);
    12                 for(int k=1;k<i;k++)dp[i][j]=min(dp[i][j],dp[k][j]+dp[i-k][j]);
    13                 for(int p=1;p<=i;p++){
    14                     for(int q=1;q<=j;q++){
    15                         dp[i][j]=min(dp[i][j],1+dp[p-1][q]+dp[i-p+1][q-1]+dp[i-p][j-q+1]+dp[p][j-q]);
    16                     }
    17                 }
    18             }
    19         }
    20         return dp[n][m];
    21     }
    22 };
    View Code
  • 相关阅读:
    Kubernates集群搭建
    Spring Security——基于表达式的权限控制
    JVM常用命令参数
    Spring 注解原理
    Linux SSH免登陆配置步骤
    错误日志收集sentry的安装与简单使用
    java.lang.UnsupportedClassVersionError
    docker maven 出错:Failed to execute goal com.spotify:docker-maven-plugin:...: Request error: POST https://192.168.99.100:2376/build?t=
    redis哨兵配置主从
    spring-data-redis使用哨兵配置一主多从
  • 原文地址:https://www.cnblogs.com/ljy08163268/p/11749297.html
Copyright © 2011-2022 走看看