首页 > 其他分享 >253 网格

253 网格

时间:2024-11-12 11:23:15浏览次数:1  
标签:11 idx int 网格 st 253 dp

// 705 网格.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
http://oj.daimayuan.top/course/5/problem/253

有一个 n×m的网格,现在我们想用 1×2的矩形铺满它,要求矩形只能横着铺或者竖着铺、矩形不能超出网格的边界并且不同的矩形之间不能相互覆盖。

请问有多少种不同的铺法?请输出铺法数对 109+7取模的结果。

输入格式
一行两个整数 n,m表示网格的大小。

输出格式
一行一个整数表示答案。

样例输入
2 2
样例输出
2
数据范围
对于 100% 的数据,保证 2≤n,m≤18。



输入格式
输入包含多组测试用例。

每组测试用例占一行,包含两个整数 N
 和 M
。

当输入用例 N=0,M=0
 时,表示输入终止,且该用例无需处理。

输出格式
每个测试用例输出一个结果,每个结果占一行。

数据范围
1≤N,M≤11


1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
11 4
0 0


1
0
1
2
3
5
144
51205


2 3
3 4
3 3
4 4
4 5
4 6
2 8
2 9
0 0


3 4
3 3
0 0
*/


 
#include <iostream>
#include <vector>
#include <cstring>


using namespace std;

int n, m;
const int N = 18;
long long dp[N*N+30][1 << N];
const long long MOD = 1000000007;

 


int main()
{
    cin >> n >> m;
    memset(dp, 0, sizeof dp);

    int idx = 10;
    dp[10][0] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = m - 1; j >= 0; j--) {
            idx++;
            for (int st = 0; st < 1 << m; st++) {
                if (st & (1 << j)) {
                    dp[idx][st] += dp[idx - 1][st ^ (1 << j)];
                    dp[idx][st] %= MOD;
                }
                else {
                    dp[idx][st] += dp[idx - 1][st ^ (1 << j)];
                    dp[idx][st] %= MOD;
                    if (j + 1 != m && (st >> (j + 1) & 1) == 0) {
                        dp[idx][st] += dp[idx - 1][st | (1 << (j + 1))];
                        dp[idx][st] %= MOD;
                    }
                }
            }
        }
    }

    cout << dp[idx][0] << endl;
        
    return 0;
}

标签:11,idx,int,网格,st,253,dp
From: https://www.cnblogs.com/itdef/p/18541477

相关文章

  • HyperWorks使用六面体和三棱柱单元进行实体网格剖分
    本节将演示如何使用solidmap功能对一个复杂的几何实体进行网格剖分。剖分的思路是:首先对该实体进行适当的切割,以使其各个部分均处于mappable的状态;然后分别对各个子块进行solidmap剖分。事实上,针对同一个几何实体,可能有多种分块方案。究竟哪种方案能获得更高质量的网格,是......
  • 地球空间网格编码规则
    中国国家标准提出《地球空间网格编码规则》(GB/T40087-2021)是2021年4月30日实施的一项中华人民共和国国家标准外文名称:Geospatialgridencodingrule规定了地球空间网格剖分要求和编码方法。该标准适用于作为空间单元与空间信息组织的地球空间网格剖分和代码标识。   ......
  • P11253 [GDKOI2023 普及组] 小学生数学题 题解
    题目传送门前置知识积性函数|乘法逆元解法观察到\(f(i)=\frac{1}{i^{k}}\bmodp\)是完全积性函数,线性筛预处理即可。需要适当的取模优化。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsignedlonglong#definesortstab......
  • COSC2531 Programming Fundamentals
    RMITClassification:TrustedProgrammingFundamentals(COSC2531)FinalCodingChallengeAssessmentTypeIndividualassessment(nogroupwork).SubmitonlineviaCanvas/Assignments/FinalCodingChallenge.Marksareawardedperrubric(pleaseseetherubric......
  • HyperWorks实体网格划分
    实体网格剖分在HyperMesh中,使用SolidMap功能进行实体网格剖分。该面板如下图所示:图4-4SolidMap面板 Ø通过SolidMapPanel进行实体网格剖分:•通过主菜单栏选择3D页面>solidmap。•通过下拉式菜单选择Mesh>create>SolidMap。 ØSolidMap......
  • LeetCode 2535[数组元素和与数字和的绝对差值]
    题目链接LeetCode2535[数组元素和与数字和的绝对差值]详情实例提示题解思路遍历容器,依次求出数字和与元素和,然后求差值:通过getSun函数,求取元素的数字和 getSun函数的实现:  将其对10取余操作,获取的余数即为当前位的数字  然后再除以10,继续对其进行10的取......
  • 题解:P11253 [GDKOI2023 普及组] 小学生数学题
    所求的式子带除法,模意义下除法计算复杂度带\(\log\)太慢了,先改写成乘法:\(\sum_{i=1}^ni!\timesi^{-k}\)。想求这个式子,最简单的思路就是对于每个整数\(i\in[1,n]\),分别预处理出\(i!\)和\(i^{-k}\)的值,最后乘起来再\(O(n)\)暴力加起来就好了!对于\(i!\),注意到:\[i!=\b......
  • 鸿蒙进阶篇-网格布局 Grid/GridItem(二)
    hello大家好,这里是鸿蒙开天组,今天让我们来继续学习鸿蒙进阶篇-网格布局Grid/GridItem,上一篇博文我们已经学习了固定行列、合并行列和设置滚动,这一篇我们将继续学习Grid的用法,实现翻页滚动、自定义滚动条样式,并实现一个小案例。1.翻页滚动到这里就需要用到控制器对象了,核心步......
  • HyperWorks的实体几何创建与六面体网格剖分
    创建和编辑实体几何在HyperMesh有限元前处理环境中,有许多操作是针对“实体几何”的,例如创建六面体网格。在创建实体网格的工作中,我们既可以使用闭合曲面创建实体网格,也可以使用完整的实体几何创建实体网格。与闭合曲面相比,使用实体几何作为操作对象更具优势:创建网格时仅需选择......
  • 学习笔记(二十四):ArkUi-网格 (Grid/GridItem)
    概述:网格布局是由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局,其使用场景有九宫格图片展示、日历、计算器等。ArkUI提供了Grid容器组件和子组件GridItem,用于构建......