POJ 3420 Quad Tiling DP?递推?+矩阵快速幂

别再为H5扫码头疼了!用Vue3 + vue-qrcode-reader,5分钟搞定移动端摄像头调用(附完整代码) 本文详细介绍了如何使用Vue3和vue-qrcode-reader快速实现移动端扫码功能,解决H5开发中常见的摄像头调用和兼容性问题。通过完整的代码示例和优化技巧,帮助开发者高效集成二维码识别功能,提升用户体验和开发效率。 阅读详情

原题链接


题目大意:
有多少种方法可以用2*1的骨牌填满4*n的棋盘


分析:
首先这道题不可能打表,其次它也不可能用STMD算法,它怎么看都像一道数学题,但是我们又不能直接计算,所以我们使用递推的方法
f[i][* * * * ]代表将要填第i行的四个格子时且第i行状态为 * * * * 的方案数,然后我们考虑一共有几种状态
0—满行1111
1—中间空1001
2—两边空0110
3—一侧空0011/1100
4—全空0000
怎么转移呢??
f[i][0]–>f[i+1][0]&f[i+1][4]&f[i+1]3&f[i+1][1]
f[i][1]–>f[i+1][0]&f[i+1][2]
f[i][2]–>f[i+1][1]
f[i][3]–>f[i+1][3]&f[i+1][0]
f[i][4]–>f[i+1][0]
注意,因为3包含两种情况,所以当前状态为空且要填满当前行使得下一行状态为一侧空的方案数要乘2
初值是什么呢??
f[0][0]=1,我们什么都没填,当前行肯定为空,且只有一种方案>_<
那么目标是啥捏??
f[n+1][0]也就是第n+1行为空时(为什么不是第n行为满时呢??因为还有可能是第n行为中间空或一侧空时,考虑起来太麻烦,所以直接考虑填完n行的状态,多么得小清新………)
然后我们就开心地想要去写递推了………..
然后我们就忧伤地发现1 ≤ N ≤ 10^9,……………..QAQ
所以还是考虑考虑矩阵快速幂吧…………..
建一个5*5的矩阵
1 1 0 2 1
1 0 1 0 0
0 1 0 0 0
1 0 0 1 0
1 0 0 0 0
然后转移就好啦…………>_<


代码如下:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define int long long
using namespace std;
int n,MOD;
struct Matrix{
    int a[5][5];
    Matrix(){
        memset(a,0,sizeof(a));
    }
    friend Matrix operator *(Matrix a,Matrix b){
        Matrix ans;
        for(int i=0;i<=4;i++)
            for(int j=0;j<=4;j++)
                for(int k=0;k<=4;k++)
                    ans.a[i][j]=(ans.a[i][j]+a.a[i][k]*b.a[k][j]%MOD)%MOD;
        return ans;
    }
}ONE,S,X;
inline int read(){
    char ch=getchar();
    int f=1,x=0;
    while(!(ch>='0'&&ch<='9')){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return f*x;
}
Matrix power(Matrix a,int b){
    Matrix ans=ONE; 
    while(b){
        if(b&1)
            ans=ans*a;
        a=a*a,b>>=1;
    }
    return ans;
}
signed main(void){
    /*0---满行1111,1---中间空1001,2---两边空0110,3---一侧空0011/1100,4---全空0000 
    f[i][0]-->f[i+1][0]&f[i+1][4]&f[i+1][3](*2)&f[i+1][1] 
    f[i][1]-->f[i+1][0]&f[i+1][2]
    f[i][2]-->f[i+1][1]
    f[i][3]-->f[i+1][3]&f[i+1][0]
    f[i][4]-->f[i+1][0]*/
    S.a[0][0]=S.a[0][1]=1,S.a[0][4]=S.a[1][0]=1,S.a[0][3]=2,S.a[1][2]=S.a[2][1]=S.a[3][0]=1,S.a[3][3]=S.a[4][0]=1;  
    X.a[0][0]=1;
    while(n=read(),MOD=read()){
        for(int i=0;i<=4;i++)
            ONE.a[i][i]=1;
        Matrix ans=X*power(S,n);
        cout<<ans.a[0][0]<<endl;
    }
    return 0;
} 

by >o< neighthorn

霍尼韦尔SoftMaster使用说明 立即下载

相关推荐

PICO4 VR开发调试神器:用Live Preview Plugin实现电脑串流,告别反复打包烧录的繁琐流程

本文详细介绍了PICO4 VR开发中如何使用Live Preview Plugin实现电脑串流,显著提升开发效率。通过实时预览和调试功能,开发者可以避免反复打包烧录的繁琐流程,特别适用于Unity环境下的VR应用开发。文章涵盖环境配置、连接设置、实时调试技巧及性能优化方案,是PICO4开发者的必备指南。

weixin_34110970的博客 418

poj3420

描述: 首先,这道题是poj2663的升级版https://blog.youkuaiyun.com/q_t_pang/article/details/81077519 在一个4*n的棋盘上,用1*2的多米诺骨牌来平铺,问铺满的方法有多少种。 同样的,我们将棋盘分为左右两部分,右边部分是不可分割的。 1、当右边部分是4*1时,不可分割的只有一种铺满方法 2、当右边部分是4*2时,不可分割的有四种平...

会飞的潜艇 712

Yolov5 多边形标签转换,所有json文件自动转成txt格式[详细过程]

注:labelme是麻省理工(MIT)的计算机科学和人工智能实验室(CSAIL)研发的图像标注工具,人们可以使用该工具创建定制化标注任务或执行图像标注,项目源代码已经开源。通过labelme对图进行标注后,得到的是json文件,而Yolov5对数据进行模型构建的时候,读取需要的是txt格式的文件。txt_outer_path——保存txt文本的文件夹的绝对路径。json_name——json_name是json文本的名字。json_floder——读取json的文件夹的绝对路径。

Pandas_007的博客 1万+

POJ2663,3420题解

两道非常像的题,放到一起来写 题目大意:用若干2x1的砖去铺一个3xN的空间(POJ3420为4xN),问总共有多少种不同的铺法。 思路:找规律。对于3xN的空间,显然N

Prgl的博客 375

java 二维码生成及其标签打印

本文主要内容 二维码生成 二维码标签预览及打印 二维码生成 笔者此次的二维码是通过调用第三方接口生成的,具体流程如下: 根据规范要求调用第三方接口,返回二维码下载地址及二维码图片的属性值(图片大小等) 根据返回的值获取二维码下载地址,根据地址下载二维码图片,保存至本地磁盘及记录数据信息 扫描二维码跳转相应地址,显示资产的基本信息 最终生成的二维码如下图所示: 预览并批量打印二维码标签 先...

孙小牟的博客 4941

Linux系统下奥比中光Astra Pro相机SDK部署与避坑指南

本文详细指导了在Linux系统下部署奥比中光Astra Pro深度相机SDK的全过程,涵盖系统准备、SDK安装、设备权限配置及常见问题排查。重点解析了USB设备规则配置这一关键步骤,并提供了Python与C++项目的集成方法,旨在帮助开发者快速完成相机配置,避免常见陷阱。

weixin_28455801的博客 299

POJ 3420

状态压缩加矩阵。 z

The Summer, The Winter 928

C#实战:如何用Chart控件打造专业级数据可视化报表(附完整代码)

本文详细介绍了如何使用C#的Chart控件创建专业级数据可视化报表,涵盖柱状图、饼图和雷达图等多种图表类型的高级定制与交互增强。通过完整的代码示例,展示了从环境配置到动态数据绑定的全流程,助力开发者提升企业级应用的数据可视化能力。

ipfs8storage的博客 418

poj 3420 Quad Tiling(状态压缩矩阵递推)

poj 3420 Quad Tiling

yjCola 810

stackelberg博弈_博弈论、多智能体、强化学习(随便记点东西)

多智能体应用场景:已实现:游戏AI。正在努力:UAV,物资运输,快递分发,交通系统。未来:社会学,预测群体行为,城市区域合作,国际关系。博弈论基本定义:玩家集合: 策略集合: 收益函数: 囚徒困境:两智能体矩阵博弈坦白抵赖坦白1,13,0抵赖0,32,2占优策略与最佳应对:上表中两者均具有占优策略,即无论如何都应该选坦白。那么构造下表。坦白抵赖坦白1,13,0抵赖0,12,2对于玩家一来说,坦白...

weixin_39611722的博客 2997

android 运动目标检测_MindSpore应用案例:AI对篮球运动员目标的检测

MindSpore作为一个端边云协同的开源的全场景AI框架,今年3月份开源以来,受到了业界的广泛关注和应用,欢迎大家参与开源贡献、模型众智合作、行业创新与应用、学术合作等,贡献您在云侧、端侧 (HiMindSpore 应用程序)、边侧以及安全领域的应用案例。MindSpore与您在AI领域共同成长,让AI使能千行百业,释放出强大的生产力。本文讲述的是MindSpore对篮球运动员目标的检测应用,通...

weixin_33603813的博客 834

Quad Tiling POJ - 3420 (矩阵快速幂)题解

Quad Tiling POJ - 3420 (矩阵快速幂)题解

Sega_hsj 's Blog 448

【异常】CNB提示The bill authorization scope cannot access the current request.

摘要:CNB API返回403错误,表明当前token的授权范围无法访问目标仓库。主要原因是:1) REPO_SLUG填写错误,导致资源地址不匹配;2) CNB_TOKEN未授权目标仓库;3) 账号账单状态异常。解决步骤:先检查REPO_SLUG是否与CNB平台仓库地址完全一致;再确认CNB_TOKEN是否绑定目标仓库且有读取权限;最后检查账号账单是否正常且覆盖目标资源。完成排查后更新配置即可解决此授权问题。

奶爸的编程之路,也就一周冷个三天 663

POJ 3420 Quad Tiling 线性递推 矩阵快速幂

题意:给出一个4 * N的方格。用1 * 2的格子去填充,问有方案数。 思路:以前做过填充格子的轮廓线DP。但是因为N           但是注意到所有格子都是可以放1*2的格子的,而不是像其他的题有某些障碍,是没有办法放置。           类比轮廓线DP的思路,我们可以以一行为转移单位。枚举前一行的所有可能的情况,对于每种情况,将没有填满的空填满。这样就转移到了下一行,继续进行上面

leodestiny 1111

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

POj 3420 Quad Tiling 状态压缩DP+递推+矩阵快速幂

哈哈,写了好久的,总算对了。 先介绍一种   递推+矩阵的快速幂的方法   一种DP的思想考虑4×n的最后一列  ,可以放的方法一共有5种    1.放4个 1×2  则 为dp[n-2]   2.   放2个 2x1  则为 dp[n-1]   3.   放 1x2    2x1  1x2  则为  dp[n-2]+dp[n-4]+.....+dp[0]  4.  放 1x2

cnh294141800的专栏 1590

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

POJ 3420 Quad Tiling 状压DP+矩阵快速幂

链接:http://poj.org/problem?id=3420 题意:给一个4*N(1 ≤ N ≤ 1e9)的矩形空间,并且给不限块数的1*2的多米诺骨牌,问是由多少种方式能把这个矩形空间填满。 思路:看到这种问题果断想到状压,虽然是在看矩阵的时候看到的这道题。dp[i][j]表示在第i行状态为j的情况下的填满方式数,j的二进制表示中0表示对应位置上一行的骨牌是竖放,或者对应位置的骨牌是横

看曙光 1412

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【POJ 3420】Quad Tiling(dp|递推 +矩阵快速幂)

秋意渐浓,阳光西斜,遍地金黄

reverie_mjp的博客 458

POJ 3420 Quad Tiling 状压DP+递推+矩阵快速幂

Quad Tiling 题解:首先根据题目数据量来看,肯定是必须有递推公式的了或者滚动数组什么的。 因此我们考虑递推情况,对于4⋅n4\cdot n4⋅n,最后一列的放置情况。 如果是444个[1⋅2][1\cdot 2][1⋅2]排列,那么dp[n]=dp[n−2]dp[n] = dp[n - 2]dp[n]=dp[n−2]。 如果是222个[2⋅1][2\cdot 1][2⋅1]排列,那么d...

Eternally831143的博客 300

POJ3420 Quad Tiling

POJ 3420 Quad Tiling

modricwang的博客 427

POJ 3420 矩阵的幂

题目链接:POJ-3420题意:用1×2的矩形填充4×n的的矩形,求方案数。思路:大家可以轻易地在网上找到状态压缩的解法,这里我给出一个递推+矩阵的幂的方法。 - a[n] = a[n-1]+b[n-1]+c[n-1]+dx[n-1]+dy[n-1] - b[n] = a[n-1] - c[n] = a[n-1]+e[n-1] - dx[n] = a[n-1]+dy

cyclization的小栈 401

POJ 3420 (矩阵二分幂优化,状压DP)

由于n 以上式子是线性的关系,显然可以构造矩阵。 #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAXN 16 #define LL __int64 const int INF=0x3f

swust_lian的博客 403

【poj3420】递推式转矩阵乘法

【poj3420】递推式转矩阵乘法 历史性的时刻!!! 推了一晚上!和hyc一起萌萌哒地推出来了!! 被摧残蹂躏的智商啊!!! 然而炒鸡高兴!! (请不要介意蒟蒻的内心独白。。) 设a[i]为扫到第i行时的方案数。 易知,对于一行1*4的格子,只有一种方案把它铺满。 首先,对于当前的第i行,如果它不和第i-1行有联系(也就是它是...

qq_25768269的博客 1223

poj2411 2663 2420 dp+状态压缩(多米诺骨牌问题)

题目描述:用1*2 的矩形通过组合拼成大矩形,求拼成指定的大矩形有几种拼法。 首先 我们先求用1*2 的矩形拼成 n*m的矩形有多少种拼法 当n*m为奇数时,一定是不会拼出来的,因为想要拼出来就需要整数倍的小矩形数目。 为了加速算法,要把m,n中小的那个当做列 分两个步骤:1) 先求出相邻两行的转化关系              2) 通过相邻两行的转化关系算出经过n次转化有几种方法能拼

我只想做一个努力的人 1万+

POJ3420 Quad Tiling【矩阵快速幂】

Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5008 Accepted: 2269 Description Tired of the Tri Tiling game finally, Michael turns to a more challengeable game, Quad Tiling: ...

海岛Blog 631

POJ 2411 + POJ 2663 + POJ 3420 小方格填充之多米诺骨牌系列(状压DP)

原文链接:http://blog.youkuaiyun.com/shiwei408/article/details/8821853解决此类问题,一般都是用1*2的小方块填充 n*m的矩阵。其中n或m两者中至少有一个较小。 解决此类的方法,当n和m都很小的时候,可以直接for循环枚举状态来更新求值。但是当二者间有一个稍大的时候,就需要构造矩阵来解决此类问题。通常将较小的那个数作为列用dfs来枚举两行之间的状态。

我要加油了,因为我还有很多NB的梦想! 1319
上一篇: POJ2337 Catenyms
下一篇: POJ 3461 Oulipo KMP模板题
NeighThorn
博客等级 码龄11年 20粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值