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并没有能够买到很好的火车票-- ...
随机推荐
- ORACLE CPU过高的sql查询
1. 根据占用CPU高的进程号来查询这个进程执行的SQL语句: CPU过高的进程号: #首先找到CPU过高的进程号 # top -bn1 是静态找到占用最高的进程 [root@localhost ...
- 《java核心技术:卷1》PDF版 和 Word版下载
链接:https://pan.baidu.com/s/1OcpdZ4wfeo55xeJQQBHXRg 提取码:hds0
- Python 操作rabbitmq中的confirm模式的错误
今天使用rabbitmq的confirm模式,书上介绍的是pika版本是0.9.6,但是我用的是别的版本,发现这样的错误 Traceback (most recent call last): Fil ...
- 揭秘autoit3的运行机制和反编译原理
今天发这个帖子的目的在于和论坛里面的朋友交流一下学习心得,主要内容是围绕着autoit3的编译原理.先开门见山的说一下结果,我不知道如何反编译au3,但相信论坛有很多高手,能解开我心中的疑团.我没有想 ...
- 三 基于Java数组手写循环队列
Code: package dataStucture2.stackandqueue; /** * 手写循环队列 * * @param <E> */ public class MyLoopQ ...
- OpenCV数字识别
输入命令: conda install opencv 返回信息:
- vue的高级使用技巧
全局组件注册 一般组件应用弊端,比较笨拙繁琐低效,比如我们写了一些组件,需要引用上的时候就通过import导入,那如果是高频繁需要使用的组件,则需要在每个使用的时候都需要引入并注册 假设现在有两个组件
- springboot打war包上传到阿里云的Linux服务器
下面的每一步应该都必不可少: 1.启动类 继承这个类,并且重新configure这个方法,return builder.sources(Code007Application.class); 2.pom ...
- unity3d Asset Store下载的资源在哪?
win7 C:\Users\(用户名)\AppData\Roaming\Unity\Asset Store\ 用户名为中文的时候,是不能直接在unity3d中打开的.
- redis5.5官方文档
https://www.cnblogs.com/zsl-find/articles/11780974.html 博客 https://redis.io/topics/cluster-tutorial ...