关于“我读过很多书,到后来大部分都被我忘记了,那阅读的意义是什么?”的疑问,我看过最巧妙的一个回答:当我还是个孩子的时候,我吃过很多的食物,大部分已经一去不复返而且被我忘记了,但可以肯定的是,它们中的一部分已经成长为我的骨头和肉。阅读对你的思想的改变也是如此。


填充的方法:

每個點三種情況,

1)是一個豎著的1*2的長方形的上半部分,對下一行限制是必須補全該長方形,用二進制1來表示

2)是一個豎著的1*2的長方形的下半部分,對下一行無限制,用0表示

3)是一個橫著的1*2的長方形的一部分,對下一行沒有限制,用0表示

按行號dp,f [ i ] [ j ]表示第 i 行狀態為 j 的方案數,

第 i-1 行的狀態 k 能轉移到第 i 行狀態為 j 當且僅當:

1.j 和 k 執行按位与結果為0(保證每個數字1的下方必須是0)

2.j 和 k 執行按位或結果每一段連續的0都必須有偶數個(若干橫著的1*2長方形)

(按位或后就去掉了和上面一起成為一個長方形的情況)

#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
int n,m;
ll f[][<<];
bool b[<<];
int main()
{
while(cin>>n>>m && n){
//預處理出[0,1<<m-1]中所有每一段連續的0都有偶數個的數
for(int i=;i< <<m;i++){
bool cnt=,has_odd=;//cnt為這一段0個數的奇偶性,hasodd為是否為奇數
for(int j=;j<m;j++)
if(i>>j & )
has_odd|=cnt,cnt=;//第j位為1就重置,并記錄在hasodd里
else cnt^=;//更新這一段奇偶性
b[i]=has_odd|cnt ? :;//其中任何一個是1都不行
}
f[][]=;
for(int i=;i<=n;i++)
for(int j=;j< <<m;j++){//枚舉狀態
f[i][j]=;//多組數據初始化
for(int k=;k< <<m;k++)
if((j&k)== && b[j|k])
f[i][j]+=f[i-][k];
}
printf("%lld\n",f[n][]);
}
}

[題解/狀壓dp]POJ_2411_Mondriaan's dream的更多相关文章

  1. [題解](狀壓/水)luogu_P1879玉米田

    大水題然而因為智障的錯誤调了半天......n,m别反着输入啊......內外循環和狀態數都不等價 别的就是記錄一下每一行不可行的點,也狀壓一下,dp的時候判一下即可 #include<bits ...

  2. [題解](單調隊列dp)【2016noip福建夏令營】探險

    P1917 -- 探险 时间限制:1000MS      内存限制:131072KB 题目描述(explore.cpp) π+e去遗迹探险,遗迹里有 N 个宝箱,有的装满了珠宝,有的装着废品. π+e ...

  3. [題解](最短路)luogu_P1119災後重建

    一道好題,然而看題解做的...... floyed的實質:只經過前k個點i到j的最短路,原狀態轉移方程為 f [ k ] [ i ] [ j ]=min( f[ k-1 ] [ i ] [ j ],f ...

  4. [題解]luogu_P1854 花店櫥窗佈置

    來源:題解 一開始看不懂題目,一萬年了終於看懂 f [ i ] [ j ] 表示第i朵花放在第j個花瓶中最大美學值,(花是必須用完嗎?) 顯然放i-1朵花至少要放到前i-1個瓶子里,最多放到前j-1個 ...

  5. [題解]luogu_P3205/BZOJ_1996 合唱隊

    前言:基本上發題解的都是抄的題解所以 來源:題解 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个 ...

  6. [題解]luogu P1156 垃圾陷阱

    前言:[數據刪除] 來源:題解 不發題面了 首先我们来分析题目,“每个垃圾都可以用来吃或堆放”,浓浓的透露出一个背包气息.我们可以类比背包问题的放或不放.于是dp[i][j]dp[i][j]dp[i] ...

  7. [題解] luogu p1220 關路燈

    區間dp 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. ...

  8. [題解](水/數學)luogu_P1147連續自然數和

    尺取法a掉 然而數學解法為 等差數列求和公式: sum(L,R)=(L+R)(R-L+1)/2=M 即(L+R)(R-L+1)=2M 可以把2M分解成两个数之积,假设分成了两个数K1,K2,且K1&l ...

  9. [題解](最小生成樹/LCA)luogu_P1967貨車運輸

    一道好題不出所料又抄的題解 1.首先對於這張圖肯定要考慮走哪些邊不走哪些邊,發現我們想要的肯定那些邊權最大的邊,所以想到最大生成樹 這樣能保證選到盡量大的邊 2.跑完最大生成樹后每兩點之間就有唯一路徑 ...

随机推荐

  1. 人生苦短之Python迭代器

     迭代 在Python中,如果给定一个list或者touple,我们可以通过for循环来遍历,将值依次取出,这种遍历称为迭代. 在Python中是通过for...in..来进行遍历的,在Java中则是 ...

  2. complex brain network

    Organization, development and function of complex brain networks The Brain as a Complex System: Usin ...

  3. 从ffmpeg filter里出来的数据直接送给avcodec_encode_audio2编码,写文件有错。

    http://hi.baidu.com/mingyuejingque/item/78e71aff57ae9ec5a835a2e4 感谢mingyuejingque st = avformat_new_ ...

  4. Android BLE 总结-源码篇(BluetoothLeAdvertiser)

    在做Android BLE的应用程序时,我们发出广播数据是调用BluetoothLeAdvertiser的startAdvertising方法,如下所示: mBluetoothLeAdvertiser ...

  5. 【Selenium】IE浏览器启动问题

    DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();ieCapabilities.setCapabi ...

  6. CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题,Highway NetWork 则允许保留一定比例的原始输入 x。(这种思想在inception模型也有,例如卷积是concat并行,而不是串行)这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network

    from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anac ...

  7. 用windows的批处理文件批量更改文件后缀

    [转自]http://jingyan.baidu.com/article/e9fb46e196ea187521f7661a.html  无需软件批量修改文件后缀名?怎么通过命令行批量修改文件后缀名?有 ...

  8. idea提交新项目到远程git创库

    1.创建远程版本库 http://192.168.28.130:81 登陆用户:maohx/123456 版本库名称最后与本地项目名称一致 如:spring-cloud-demo 2.创建本地版本库 ...

  9. JavaWeb----文件的上传和下载

    一.开发环境搭建 创建一个FileUploadAndDownLoad项目,加入Apache的commons-fileupload文件上传组件的相关Jar包,如下图所示: 二.实现文件上传 2.1.文件 ...

  10. spark运行模式之一:Spark的local模式安装部署

    Spark运行模式 Spark 有很多种模式,最简单就是单机本地模式,还有单机伪分布式模式,复杂的则运行在集群中,目前能很好的运行在 Yarn和 Mesos 中,当然 Spark 还有自带的 Stan ...