
算法:状压dp
主要思想就是利用二进制上的1和0来分别表示在一个位置,放和不放1*2的横着的长方形,例如若一列有四个格子十进制表示为4,放和不放可以表示成0~(1<<4)-1,也就是二进制上的0~1111,它一定能遍历到所有摆放情况。然后我们需要判断摆放是否合法,需要判断0的个数不能为奇数个,也一列上就是不能有奇数个空格,因为我们枚举的是横着的摆放,枚举完横着的,剩下的空格就要放竖着的,若空格长度为奇数,竖着的长方形会塞不满或者塞不下。最后枚举各个列的时候,需要判断前一个列是否有伸出的长方格于该列的长方格重叠,并且判断前一个列伸出的长方格与该列长方格的并集是否合法。
- #include
- #define int long long
- using namespace std;
- const int N=12;
- int f[12][1<
- int st[1<
- signed main() {
- int n,m;
- while(cin>>n>>m&&n&&m) {
- memset(f,0,sizeof f);
- for(int i=0; i<1<
- st[i]=1;
- int cnt=0;
- for(int j=0; j
- if(i>>j&1) {
- if(cnt&1) {
- st[i]=0;
- break;
- }
- } else cnt++;
- }
- if(cnt&1)st[i]=0;
- }
- f[0][0]=1;
- for(int i=1; i<=m; i++)
- for(int j=0; j<1<
- for(int k=0; k<1<
- if(!(j&k)&&st[k|j])f[i][j]+=f[i-1][k];
- }
- cout<
0]< - }
- }
-
相关阅读:
day62:ARMday9,I2c总线通信
基于Java的在线考试系统(附:源码和课件)
render函数使用和详解
基于C++的社交应用的数据存储与实现
拉链表-spark版本
docker 映射端口穿透内置防火墙
【华为OD机试-计算疫情扩散时间-Java】
若依注解学习(一)@Log
【生日快乐】SpringBoot SpringBoot 基础篇(第一篇) 第4章 SpringBoot 综合案例 4.8 删除客户
Mac 远程 Ubuntu
-
原文地址:https://blog.csdn.net/JCGOODER/article/details/127769741
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU