首页 > 其他分享 >907 骨牌覆盖

907 骨牌覆盖

时间:2025-01-17 10:43:11浏览次数:1  
标签:cnt return 907 覆盖 int else flag 109 骨牌

// 907 骨牌覆盖.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://oj.daimayuan.top/course/22/problem/1047

给定一个 n×m的棋盘,你需要用 1×2的多米诺骨牌去覆盖整个棋盘,请求出有多少种不同的覆盖方案。
由于答案可能很大,请输出答案模 109+7。

输入格式
第一行两个整数 n,m。

输出格式
一行一个数表示答案模 109+7的结果。

样例输入
2 3
样例输出
3 
数据范围
对于 100%的数据,保证 1≤n≤109,1≤m≤5。
*/

#include <iostream>
#include <cstring>


using  namespace std;

const int  N = 5;
long long  a[1 << N][1 << N];
long long  f[1 << N];
const int MOD = 1000000007;
int n, m;


bool check(int st) {
	//连续的0 必须是双数
	int flag = 0; int cnt = 0;
	for (int i = 0; i < m; i++) {
		if ((st >> i) & 1) {
			if (flag == 1 && cnt % 2) return false;
			else {
				cnt = 0; flag = 0;
			}
		}
		else if (flag == 0) {
			flag = 1; cnt++;
		}
		else if (flag == 1) {
			cnt++;
		}
	}

	if (flag == 1 && cnt % 2) return false;
	return true;
}

void init() {
	for (int i = 0; i < 1 << m; i++) {
		if (check(i)) {
			f[i] = 1;
		}
		for (int j = 0; j < 1 << m; j++) {
			if ((i & j) == 0 && check(i | j)) {
				a[i][j] = 1; a[j][i] = 1;
			}
		}
	}
}


void fa() {
	long long w[1<<N];
	memset(w, 0, sizeof w);
	for (int i = 0; i < 1 << m; i++) {
		for (int j = 0; j < 1 << m; j++) {
			w[i] += f[j] * a[j][i];
			w[i] %= MOD;
		}
	}
	memcpy(f, w, sizeof w);
}


void aa() {
	long long w[1 << N][1 << N];
	memset(w, 0, sizeof w);
	for (int i = 0; i < 1 << m; i++) {
		for (int j = 0; j < 1 << m; j++) {
			for (int k = 0; k < 1 << m; k++) {
				w[i][j] += a[i][k] * a[k][j];
				w[i][j] %= MOD;
			}
		}
	}

	memcpy(a, w, sizeof w);
}

void matrixpow(int k) {
	while (k) {
		if (k & 1)
			fa();
		aa();
		k >>= 1;
	}
}


int main()
{
	cin >> n >> m;
	init();
	
	matrixpow(n - 1);

	cout << f[0] << endl;

	return 0;
}

标签:cnt,return,907,覆盖,int,else,flag,109,骨牌
From: https://www.cnblogs.com/itdef/p/18676467

相关文章

  • 域用户完美执行应用程序.210907
    企业环境中,为了安全起见一般都没有赋予域用户或者企业的PC客户端用户管理员权限。但偶尔会有个别的程序一定需要管理员身份才能执行,如财务某些程序或专业的应用程序。那么如何不赋予用户管理员权限及密码但又可以让用户有权限执行指定的程序呢?下面就介绍几种主流的办法:1,runas命......
  • 说说你对CSS样式覆盖规则的理解
    CSS(层叠样式表)的样式覆盖规则是前端开发中非常关键的一部分,它决定了当多个样式规则应用于同一个元素时,哪个规则会最终生效。以下是我对CSS样式覆盖规则的理解:内联样式优先于内部样式和外部样式:在HTML元素中使用style属性直接定义的样式具有最高的优先级。例如,<divstyle="color......
  • Ellyn-Golang调用级覆盖率&方法调用链插桩采集方案
    词语解释Ellyn要解决什么问题?在应用程序并行执行的情况下,精确获取单个用例、流量、单元测试走过的方法链(有向图)、出入参数、行覆盖等运行时数据,经过一定的加工之后,应用在覆盖率、影响面评估、流量观测、精准测试、流量回放、风险分析等研发效能相关场景。常见的覆盖率工具实现......
  • 统计代码量+处理代码单元测试覆盖率命令
    没有changeId:cd.gitlsrm-rfhooksmkdirhookscd../gitdir=$(gitrev-parse--git-dir);scp-O-P29418huangting2@gerrit.cmss.com:hooks/commit-msg${gitdir}/hooksgit常用命令大全:相关名词解释master:默认开发分支origin:默认远程版本库Index/Stage:暂存区Wo......
  • 覆盖和覆盖D2D通信网络的传输容量分析(Matlab代码实现)
    ......
  • Mysql--重点篇--索引(索引分类,Hash和B-tree索引,聚簇和非聚簇索引,回表查询,覆盖索引,索引
    索引是数据库中用于加速查询操作的重要机制。通过索引,MySQL可以快速定位到满足查询条件的数据行,而不需要扫描整个表。合理的索引设计可以显著提高查询性能,但不合理的索引可能会导致性能下降和磁盘空间浪费。因此,理解索引的工作原理、类型以及如何优化索引非常重要。一、索......
  • LeetCode:76.最小覆盖子串
    LeetCode:76.最小覆盖子串+helperdivdsxcpv+lean+edjuxdsksforgetAnalyticstomyself解题思路先找出所有的包含T的子串。找出长度最小那个子串,返回即可。用双指针维护一个滑动窗口。移动右指针,找到包含T的子串,移动左指针,尽量减少包含T的子串的长度。循环上述过程,找......
  • 白盒测试用例设计方法(逻辑覆盖法或者基本路径法)
    目录前言:逻辑覆盖测试法语句覆盖定义实例判定覆盖 定义实例条件覆盖 定义实例判定-条件覆盖 定义实例条件组合覆盖 定义实例路径覆盖 定义实例接下来我们讲基本路径法:定义步骤1:导出过程的控制流图:根据流程图分析结点:步骤2:确定环形复杂性度量V(G......
  • 2025股票数据API接口实测可用集合推荐:实时交易、买卖五档、分价成交、分时交易、历史
    一、数据接口链接以下所有数据接口链接均可直接点击,可以马上验证接口有效性实时交易数据API接口:http://api.mairui.club/hsrl/ssjy/000001/b997d4403688d5e66a买卖五档盘口数据API接口:http://api.mairui.club/hsrl/mmwp/000001/b997d4403688d5e66a当天逐笔交易数据API......
  • P2082 区间覆盖(加强版)
    P2082区间覆盖(加强版)题目已知有\(N\)个区间,每个区间的范围是\([s_i,t_i]\),请求出区间覆盖后的总长。输入第一行一个正整数\(N\),表示区间个数。接下来\(N\)行,每行两个正整数,表示\(s_i\)和\(t_i\)。输出共一行,一个正整数,为覆盖后的区间总长。样例输入31100000......