HihoCoder第九周 状态压缩 二 与POJ2411总结
在此我向各位博友求助,特别想知道除了HihoCoder上面的结果要对1e9+7取余之外,这两道题还有什么其他的问题,都是骨牌覆盖问题,都是状态压缩+dp,为什么我能过poj2411的程序过不了HihoCoder,还不是其他诸如TimeLimited,而是Wrong Answer,这个问题我想了很久,还是不知道是怎么回事,如果有神通广大的博友知道答案,希望你能告诉我。顺便说一下,HihoCoder给的那个hint只看懂了一部分递推的公式,其中满足的那个条件还是不懂。
两个题目的连接地址:
http://hihocoder.com/problemset/problem/1048
http://poj.org/problem?id=2411
骨牌覆盖问题我想了很久很久,我自己也知道对于每一个位置上的骨牌来说,有三种可能,有可能是上楼的骨牌,有可能是下楼的骨牌,也有可能是同楼层的骨牌。但当时我思考的时候,就在想,比方说2*2这个位置。
有两种摆法,我当时就在想如何记录result[1][1]=2,因为这两种条件都满足了,所以result[1][1]=2?那之后的result[1][2]呢?
觉得这样不对。就完全没有思路了。
最后看了一个动态规划算法,但其实这道题算动态规划的话,我更觉得像枚举,枚举上楼的所有情况,枚举下楼的所有情况,看这两种情况里面,哪些合拍,之后才是动态规划记录其和的事。
首先觉得这种记录方法很棒,即记录两层楼的状态,如果是01代表竖着一个骨牌。如果是10代表,楼上的骨牌怎么来的不知道,但从楼下竖着一块牌是确定的。如果是11,说明都是横着的牌,所以楼上和楼下的下一张牌都要是1才能满足条件。如果是00,则GG。
之后就是第一层的初始化,只需记住1要成对出现就行了(因为这是第一层)。
被这题折磨太久,印象实在太深。希望交流。
#include <iostream>
#include <cstring>
using namespace std; #define M 12 long long dp[12][1<<M];
int n,m; int init_ok(int i)
{
int count;
for(count=m-1;count>=0;)
{
if((i>>count)&1)
{
if((i>>(count-1))&1)
{
count= count-2;
continue;
}
else
{
count--;
return 0;
}
}
else
{
if(count==1&&(i&1))
return 0;
else
{
count--;
continue;
}
} }
return 1;
} void init()
{
int count;
int kongjian = (1<<m)-1; memset(dp,0,sizeof(dp)); for(count=0;count<=kongjian;count++)
{
if(init_ok(count))
dp[0][count]=1;
}
} bool match(int a, int b)
{
for (int i = 1; i < 1 << m;)
{
if (((a & i) == 0) && ((b & i) == 0))
return false;
if ((a & i) && (b & i))
{
if ((a & (i << 1)) && ((b & (i << 1))))
{
i <<= 2;
continue;
}
else
return false;
}
i <<= 1;
}
return true;
} int main()
{ while(scanf_s("%d %d",&n,&m),n &&m)
{
int i,shang,xia;
if(n < m)
i = n ,n = m,m =i;
int kongjian = (1<<m)-1; init(); for(i=1;i<n;i++)
{
for(xia = 0;xia<=kongjian;xia++)
{
for(shang=0;shang<=kongjian;shang++)
{
if(match(shang,xia))
dp[i][xia]+=dp[i-1][shang]; }
}
} cout<<dp[n-1][kongjian]<<endl;
} return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
HihoCoder第九周 状态压缩 二 与POJ2411总结的更多相关文章
- 【HIHOCODER 1048】 状态压缩·二
描述 历经千辛万苦,小Hi和小Ho终于到达了举办美食节的城市!虽然人山人海,但小Hi和小Ho仍然抑制不住兴奋之情,他们放下行李便投入到了美食节的活动当中.美食节的各个摊位上各自有着非常多的有意思的小游 ...
- hihocoder 1334 - Word Construction - [hiho一下第170周][状态压缩+DFS]
题目链接:https://hihocoder.com/problemset/problem/1334 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given N wo ...
- hihoCoder#1048 状态压缩·二
原题地址 位运算的状态压缩太操蛋了,很容易出错...又是数组没开够导致诡异现象(明明某个值是1,莫名其妙就变成0了),害我debug一整天!fuck 代码: #include <iostream ...
- 【hiho一下 第九周】 状态压缩·二
[题目链接]:http://hihocoder.com/problemset/problem/1048 [题意] [题解] 按从左到右然后从上到下的顺序; 依次枚举每个格子是竖条还是横条; 然后在搜索 ...
- HihoCoder第八周:状态压缩 一
1044 : 状态压缩•一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前 ...
- 状态压缩dp(hdu2167,poj2411)
hdu2167 http://acm.hdu.edu.cn/showproblem.php?pid=2167 给定一个N*N的板子,里面有N*N个数字,选中一些数字,使得和最大 要求任意两个选中的数字 ...
- hihoCoder week8 状态压缩·一
状态压缩 写了两个半小时 太菜了 题目链接 https://hihocoder.com/contest/hiho8/problem/1 #include <bits/stdc++.h> ...
- [hihoCoder] #1044 : 状态压缩·一
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市——那座城市即将 ...
- 【HIHOCODER 1044】题目1 : 状态压缩·一
描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市--那座城市即将举行美食节! 但是不幸的是,小Hi和小Ho并没有能够买到很好的火车票-- ...
随机推荐
- [经验] 关于 Java 中的非空判断
在写项目的时候, 遇到一个问题 假设有一个控制层接口为: @ResponseBody @RequestMapping(value = "test", method = Reques ...
- CDQ分治-陌上花开(附典型错误及原因)
CDQ分治-陌上花开 题目大意 对于给遗传给定的序列: \[ (x,y,z)_1, (x,y,z)_2, (x,y,z)_3, \cdots, (x,y,z)_n \] 求: \[ \sum_{x_i ...
- 单页面应用程序(SPA)的优缺点
我们通常所说的单页面应用程序通常通过前端框架(angular.react.vue)进行开发,单页面应用程序将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.JavaScr ...
- 攻防世界web进阶区(2)--记一次sql注入
题目地址:http://111.198.29.45:56094 这是一道sql注入题. 试试1' order by 3#,发现页面显示正常,将3换为4时,页面报错,则说明含有3个字段. 接下来判断输出 ...
- 3676: [Apio2014]回文串 求回文串长度与出现次数的最大值
「BZOJ3676」[Apio2014] 回文串 Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所 ...
- 从POST和GET和request过滤掉SQL注入
替换掉sql关键字,进行处理 // sql参数过滤 function sqlCheck($paramater){ $arr = array(); foreach($paramater as $k=&g ...
- 运算符 Operator 及优先级
算数运算符 + - * / ** % /表示自然除,结果是浮点数.//为整除.python2.x版本/和//都是整除. 位运算符 & | ~ ^ << >> <& ...
- LATTICE 编程烧录器HW-USBN-2B使用说明
HW-USBN-2B说明文档 1. 引脚定义 编程引脚 名称 编程设备引脚类型 描述 VCC 编程电压 输入 连接VCC到目标设备,典型的ICC=10Ma.板子设计必须考虑VCC的电流供应 ...
- 【rabbitmq】Queueingconsumer被废止后老代码如何做的解决方案
amqp-client 3.x之前的rabbitmq版本有个消费者的写法是借助于Queueingconsumer的: QueueingConsumer consumer = new QueueingC ...
- 关于Burp Suite Intruder 的四种攻击方式
以下面这一段参数为例,被§§包围的部分为需要破解的部分: user=§ss§&password=§zxcv§&imageField.x=17&imageField.y=1 (1 ...