【poj 2411】Mondriaan's Dream 状态压缩DP

POJ 2411 Mondriaan's Dream详细解题报告 里面有非常详细的对于POJ 2411的解题报告,相信对于初学动态规划和深度优先搜索的同学来说有很好的帮助作用。 立即下载

Mondriaan’s Dream

Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 14345 Accepted: 8273

Description

Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his ‘toilet series’ (where he had to use his toilet paper to draw on, for all of his paper was filled with squares and rectangles), he dreamt of filling a large rectangle with small rectangles of width 2 and height 1 in varying ways.

Expert as he was in this material, he saw at a glance that he’ll need a computer to calculate the number of ways to fill the large rectangle whose dimensions were integer values, as well. Help him, so that his dream won’t turn into a nightmare!
Input

The input contains several test cases. Each test case is made up of two integer numbers: the height h and the width w of the large rectangle. Input is terminated by h=w=0. Otherwise, 1<=h,w<=11.

Output

For each test case, output the number of different ways the given rectangle can be filled with small rectangles of size 2 times 1. Assume the given large rectangle is oriented, i.e. count symmetrical tilings multiple times.
Sample Input
1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
0 0

Sample Output
1
0
1
2
3
5
144
51205

Source

Ulm Local 2000
这里写图片描述

题目链接:http://poj.org/problem?id=2411

题意:
经典的铺砖块问题;

思路:
1.《=11的数据范围–》状态压缩DP
递推式:

dp[i]+=tmp[j];

2.滚动数组dp[i]与前一行达到i状态的方案数

代码2:()dfs版

#include<iostream>
#include<string.h> 
using namespace std;
long long  f[12][1<<12];//fullfil level i,the imfactto sta   ; target f[m][0];
int n,m;
int num=0;
int F1[1<<23];
int F2[1<<23];
void dfs(int i,int fromm,int too)
{
    if(i>n) return;
    if(i==n)   
    {   
    num++;  
    F1[num]=fromm;
    F2[num]=too;    
    }
    dfs(i+1,(fromm<<1)+1,too<<1);
    dfs(i+1,fromm<<1,(too<<1)+1);
    dfs(i+2,fromm<<2,too<<2);
}
int main()
{
    while(cin>>n>>m)
    {  
    if(n==0&&m==0)
    return 0;
    num=0;
    memset(f,0,sizeof(f));

    f[0][0]=1;
    dfs(0,0,0);
    for(int i=0;i<=m-1;i++)
      for(int j=1;j<=num;j++)
          {
            f[i+1][F2[j]]+=f[i][F1[j]];
          }


   cout<<f[m][0]<<endl;

    }
    }



//for(int i=0;i<m;i++)
   //for(int j=0;j<=(1<<n-1);j++)
      // {
     // 
     // f[i+1][k]+=f[i][j];
       // }

代码:dp

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define M (1<<11)+10
long long tmp[M];
long long  dp[M];
int n,m;
bool mark[M];
long long  b[13];
bool C(int x)
{
    while(x)
    {
        if(x&1)
        {
            x>>=1;
            if(!(x&1)) return 0;  //第j列是1则第j+1列必须是1 
            x>>=1;
        }
        else x>>=1;
    }
    return 1;
}
void init()
{
    memset(mark,0,sizeof(mark));
    memset(tmp,0,sizeof(tmp));
    for(int i=0;i<b[m];i++)
    if(C(i))
    tmp[i]=1,mark[i]=1;



}
void solve()
{
    for(int k=2;k<=n;k++)
    {
        for(int i=0;i<b[m];i++)
        {
            dp[i]=0;
            for(int j=0;j<b[m];j++)
            {
                if((i|j)!=b[m]-1) continue;
                if(!mark[i&j]) continue;
                dp[i]+=tmp[j];
            }
        }
        for(int i=0;i<b[m];i++) tmp[i]=dp[i];
    }
    printf("%lld\n",tmp[b[m]-1]);

}
int main()
{

    b[0]=1;
    for(int i=1;i<12;i++) b[i]=b[i-1]*2;
    while(scanf("%d%d",&n,&m))
    {
        if(!n&&!m) r``
turn 0;
        if(m>n) swap(n,m);
        init();
        solve();
    }


} 
Python爬虫实战:从巨潮资讯网高效获取结构化JSON数据 在数据采集与处理领域,网络爬虫是实现自动化信息获取的核心技术。其基本原理是通过模拟浏览器行为,向目标服务器发送HTTP请求并解析响应内容,从而提取所需数据。相较于传统的网页解析,直接获取结构化数据(如JSON格式)能极大提升数据处理的效率与准确性,避免了复杂的HTML解析或PDF文本提取过程。这一技术价值在金融数据分析、市场研究、舆情监控等场景中尤为突出,能够快速构建高质量的数据集。本文以Python爬虫为例,聚焦于从巨潮资讯网这类官方信息披露平台,精准定位并抓取JSON格式的上市公司年报数据,详细阐述了接 阅读详情

相关推荐

抖音短视频数据抓取实战系列(一)——模拟器性能对比与优化配置

本文是抖音短视频数据抓取实战系列的开篇,重点探讨了模拟器选型与优化配置。通过对比雷电、夜神、逍遥三大主流模拟器在性能、抖音兼容性及抓包友好度上的表现,文章指出雷电模拟器因其稳定的桥接网络模式和良好的兼容性,是数据抓取的优选。并提供了雷电模拟器从安装、网络桥接到系统优化的详细配置指南,旨在帮助读者构建稳定高效的抓取环境。

weixin_29230901的博客 244

Mondriaan‘s Dream(状压dp)

题目描述 正方形和长方形着迷荷兰著名画家彼得·蒙德里安。一天晚上,他做了个梦,想在厕纸上画出来,他梦中用小长方形以不同的方式填充一个大长方形,而每个小长方形的大小是2x1。 他是在这个材料中的专家,他一眼就看出他需要一台计算机来计算填充长方形的方法,这些长方形的尺寸也是整数值。帮助他,使他的梦不会变成一场噩梦! 输入 输入包含多个测试案例。每个测试案例是由两个整数:高度H和W的大矩形的宽度,且1 <= h,w <=11。当输入H = W = 0时表示终止 输出 对于每个测试用例,输出不同的填充方

qq_45778406的博客 740

基于 YOLOv26 的金属表面缺陷检测系统:智能视觉质检方案

摘要: 基于YOLOv26的金属表面缺陷检测系统采用深度学习技术,实现对划痕、裂纹、腐蚀等8类常见缺陷的自动化检测。系统通过数据增强预处理和YOLOv26模型的高精度识别能力,具备多类别分类、实时推理和强鲁棒性特点,适用于不同金属材质与光照条件。架构包含数据采集、预处理、YOLOv26检测和后处理模块,代码实现采用PyTorch框架,支持训练数据增强与标准化处理,为工业质检提供高效智能解决方案。

一键难忘的博客 588

Mondriaan's Dream(状压dp)

Mondriaan’s Dream(状压dp) Time Limit: 3000MS Memory Limit: 65536K judge:poj 2411 source:Ulm Local 2000 Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One nigh...

画船听雨眠 302

华为OD机试 - 小火车最多人时所在园区站点(Java 2024 E卷 100分)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 995

uniapp [全端兼容] - 详细实现用户电子签名 “逐字校验“ 将姓名按字拆开分别手写签署签字,把客户名字自动拆成单独的文字并由用户逐个依次签名与汉字笔画校验,支持汉字格、田字格、米字格、方格等!

uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,手写签名,电子签署,逐个字挨着写,写名字,将客户姓名分成单独的文字并依次手写,在田字格里写名字,米字格,方格,合同,书写轨迹,验证手写的文字是否正确,如何在uni-app做姓名拆分成独立的文字后手写每一个字,校验正确性,画板,汉字生成在米字格里并且让用户去写,如何画一个汉字田字格,vue把姓名拆分单独写签名,文字,拆掉,中文汉字网格,一个字一个字签名,一次只签名一个文字,判断签名的文字笔画是否正确,Un

🏆 前端领域优质创作者 1万+

算法:轮廓线dp

文章目录什么是轮廓线DP例题一:铺砖问题(Poj 2411) 什么是轮廓线DP 适用范围: 较窄的棋盘(m×nm \times nm×n中mmm或者nnn较小)。按整行或者整列无法进行转态转移。而把轮廓线作为状态一部分。具体见例题。 例题一:铺砖问题(Poj 2411) 我们在状压DP中已经介绍过一种整行状态转移的方法,但是这里我们采用轮廓线的方法解决。对每个小格,我们定义0为非覆盖,1为覆盖...

Wangpeiyi9979的博客 5601

k230+CanMV+micropython环境下byte、int、hex、string之间的转换常用函数实测

【代码】k230+CanMV+micropython环境下byte、int、hex、string之间的转换常用函数实测。

weixin_47446386的博客 119

POJ_P2411 Mondriaan's Dream(轮廓线DP)

Mondriaan’s Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 13983 Accepted: 8086 DescriptionSquares and rectangles fascinated the famous Dutch painter Piet Mondriaan. On

BeiYu 621

使用C#实现Padim算法的训练和推理:智能缺陷检测的前沿技术

Padim (Patch-based Deep Image Model) 是一种用于无监督异常检测的深度学习算法。它通过提取图像中的局部特征(patch),并在这些特征上构建一个正常样本的分布模型来识别异常。无监督学习:不需要标注数据,适用于缺乏标签的情况。局部特征提取:通过卷积神经网络提取图像的局部特征(patch)。低秩近似:利用低秩近似构建正常样本的协方差矩阵,有效降低计算复杂度。鲁棒性强:能够处理多种类型的缺陷和噪声。

墨夶的博客 1013

点云体积计算方法之一 附python代码

另外需要注意,这个只适合点云密集分布的场景来计算体积,比如树木扫描的体积;如果只是有表面积扫描的点云,该方法就不能计算整个物体的体积了。通过计算点云所占用的体素的数量来计算点云的近似体积。这是一个非常粗略的近似值,对于复杂的形状可能不准确。

三维点云技术探索 1886

Mondriaan's Dream POJ - 2411(轮廓线dp 状压dp)

Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his ‘toilet series’ (where he had to use his toilet paper to draw on, for all of h...

tomjobs的博客 1710

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

poj 2411 Mondriaan's Dream(状态压缩dp)

Mondriaan's Dream Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use h

小张的专栏 4886

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[poj 2411] Mondriaan's Dream{状态压缩DP}

题目 http://poj.org/problem?id=2411 解题思路 代码 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; using namespace std; int n,m; long long f[12][1&lt;&lt;11]; bool s[1&lt;&lt;11]; ...

Nowed 435

【poj2411】Mondriaan's Dream 状态压缩dp

AC传送门:http://vjudge.net/problem/POJ-2411 【题目大意】 有一个W行H列的广场,需要用1*2小砖铺盖,小砖之间互相不能重叠,问有多少种不同的铺法? 【题解】 对于每一行有w个位置,所以每一行都有0~2w-1种状态。 对于当前行的状态s,它是由前一行的状态s’转化过来的,显然,对于该行某个位置j: 如果前一行该位置为0,那么该位置可...

anzhi7214的博客 146

POJ 2411 Mondriaan's Dream 状态压缩DP

题目很好理解 就是有一些1X2的小矩形 问将其填充到 NxM的大矩形 一共有多少种方案。 比较明显的状压DP,最关键的是状态的选择。我们可以吧竖着的 1x2 矩形的上半部分 当作1 吧其他状况当作0 压缩状态 然后 我们只需要保证 每一行与前一行与状态为0 按位与的结果中不存在连续奇数个0 之后,我们可以得到DP方程 f[i,j] = Σ f[i-1,k] j&k=0 &&amp...

Magic_Sheep的博客 224

poj 2411 Mondriaan's Dream 状态压缩dp

Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use his toilet paper to

lastone的专栏 328

poj2411Mondriaan's Dream(状态压缩dp)

Mondriaan's DreamTime Limit:3000MS    Memory Limit:65536KB    64bit IO Format:%I64d & %I64u SubmitStatusPracticePOJ 2411 Appoint description: Description Squares and rectangles fas

哇咔咔 431

poj2411——Mondriaan's Dream(状态压缩DP)

Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8702Accepted: 5024 Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night

JIA_char 471

poj 2411 Mondriaan's Dream(状态压缩DP)

Mondriaan's Dream \(solution:\) 这道题 \(wch\) 首先想到的是搜索和状态压缩,因为这道题的方块可以竖着也就是产生一个凸起(这里可以状态压缩),我们可以枚举它i行j列上下端凸起的情况产生的方案数,然后进行合并。但是这种方法需要维护的东西太多了,复杂度也很难预测。所以 $wch $ 想着忽略上端凸起,直接从第一行开始向下递推,然后只需要用状态研所记录下端竖着...

weixin_30546933的博客 88

poj2411 Mondriaan's Dream 状态压缩dp

首先来说一下此题的动归思想。可以模拟一下我们手放的过程,刚开始时棋盘为空,所以我们就从第一行开始铺,当第一行铺满后,再从第二行开始铺(注意此时第二行有些方格可能已经被占了),然后一直进去……            对于当前行,每个方格都有两种铺法,因此这就影响到了当前行铺完后下一行的状态。如果我们选取第i行各方格的初始状态作为第i行的状态,那么从第i行到第i+1行的状态转移也就很清楚了。接下来就是

程序猿之路 1338

poj 2411 Mondriaan's Dream 状态压缩DP

http://blog.youkuaiyun.com/hopeztm/article/details/8062562 这篇博文比较容易懂。 题目 这个题目的题意很容易理解,在一个N*M的格子里,我们现在有两种类型的 砖块,1 * 2 和 2 * 1,问一共有多少种方案,可以将整个N*M的空间都填满。 最简单的例子就是下面的了: 编程之美中题目: 某年夏天,位于希

R_xiaozhu_Q的专栏 2300
上一篇: [poj 3254] Corn Fields  状态压缩DP(递推)
下一篇: 【codeforces 651B - Beautiful Paintings 】 greedy(贪心)
ALPS233
博客等级 码龄11年 25粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值