当前位置: 首页 > news >正文

【拼图——拼图类压缩dp,矩阵乘法,快速幂,DFS】

题目

分析

难点在于看出相邻列之间状态的转移是按照固定的状态转移矩阵进行的,并依据此采用矩阵乘法+快速幂来优化

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int mod = 1e9 + 7;
const int M = 1 << 7;

ll m;
int n;
int w[M][M];
int ans[M][M];

void dfs(int r, int j, int ne)
{
    if (r >= n)
    {
        w[j][ne] += 1;
        return;
    }

    if (j & (1 << r))
        dfs(r + 1, j, ne);
    else
    {
        if (r - 1 >= 0 && (ne & (1 << r - 1)) == 0 && (ne & (1 << r)) == 0)
            dfs(r + 1, j, ne | (1 << r - 1) | (1 << r));
        if (r + 1 < n && (ne & (1 << r)) == 0 && (ne & (1 << r + 1)) == 0)
            dfs(r + 1, j, ne | (1 << r) | (1 << r + 1));
        if (r + 1 < n && (j & (1 << r + 1)) == 0 && (ne & (1 << r)) == 0)
            dfs(r + 2, j, ne | (1 << r));
        if (r + 1 < n && (j & (1 << r + 1)) == 0 && (ne & (1 << r + 1)) == 0)
            dfs(r + 2, j, ne | (1 << r + 1));
    }
}

void mul(int a[][M], int b[][M], int c[][M])
{
    static int t[M][M];

    memset(t, 0, sizeof t);
    for (int i = 0; i < 1 << n; i++)
        for (int j = 0; j < 1 << n; j++)
            for (int k = 0; k < 1 << n; k++)
                t[i][j] = (t[i][j] + 1ll * a[i][k] * b[k][j] % mod) % mod;

    memcpy(c, t, sizeof t);
}

void qmi(ll expo, int a[][M], int b[][M])
{
    while (expo)
    {
        if (expo & 1)
            mul(ans, w, ans);
        mul(w, w, w);
        expo >>= 1;
    }
}
int main()
{
    scanf("%lld%d", &m, &n);

    for (int j = 0; j < 1 << n; j++)
        dfs(0, j, 0);

    ans[0][0] = 1;
    qmi(m, ans, w);

    printf("%d", ans[0][0]);
}

相关文章:

  • FinRL-DeepSeek: 大语言模型赋能的风险敏感型强化学习交易代理
  • 使用shardingsphere-proxy读写分离
  • Java网络编程封装
  • 如果二者隔离级别不一致,以哪个为主。例如@Transactional 隔离级别是RC,mysql是RR
  • MySQL安装
  • Docker 与 CI/CD:自动化构建和部署
  • MySQL数据库——索引结构之B+树
  • flowable 全生命周期涉及到的api及mysql表
  • nextjs项目搭建——头部导航
  • 【数论】—— 快速幂与扩展欧拉定理
  • 【Web开发】PythonAnyWhere免费部署Django项目
  • 第六次作业
  • python类型转换深浅拷贝
  • 了解Pipx:一个轻量但强大的Python工具
  • 如何在 SpringBoot 项目创建并使用 Redis 的详细介绍
  • 【漫话机器学习系列】103.学习曲线(Learning Curve)
  • 蓝桥杯之阶段考核
  • 跟李沐学AI:InstructGPT论文精读(SFT、RLHF)
  • 《Mycat核心技术》第17章:实现MySQL的读写分离
  • 网络安全入门 | TCP/IP协议栈核心协议详解(附攻防案例)
  • 交易平台网站开发教程百度云/广州seo公司如何
  • 优美女人女性网站模版/手机百度app免费下载
  • 武汉万网站制作 费用/什么是百度竞价
  • 做外贸没网站可以吗/市场推广方案范文
  • 和狗狗做电影网站/宣传推广图片
  • 宁波网站建设科技有限公司/百度搜索引擎seo