状态压缩是一个很广的概念,在OI中也有很多的应用,当我们把他应用到动态规划中,可以用来精简状态,节约空间,也方便转移。最常见的就是用二进制来表是状态,利用各种位移运算,就可以实现\(O(1)\)的转移。状压DP适用于“窄棋盘”上的DP,否则状态太多无法存下。POJ1185炮兵阵地题意:给一个\(N ...
分类:
其他好文 时间:
2014-07-27 23:17:19
阅读次数:
391
链接:http://poj.org/problem?id=3420
题意:给一个4*N(1 ≤ N ≤ 1e9)的矩形空间,并且给不限块数的1*2的多米诺骨牌,问是由多少种方式能把这个矩形空间填满。
思路:看到这种问题果断想到状压,虽然是在看矩阵的时候看到的这道题。dp[i][j]表示在第i行状态为j的情况下的填满方式数,j的二进制表示中0表示对应位置上一行的骨牌是竖放,或者对应位置的骨牌是横...
分类:
其他好文 时间:
2014-07-27 11:40:15
阅读次数:
269
状态压缩DP
dp[i][j]表示在i状态(用二进制表示城市有没有经过)时最后到达j城市的最小时间
转移方程dp[i][j]=min(dp[i][k]+d[k][j],dp[i][j])
d[k][j]是k城市到j城市的最短距离 要先用flody处理
#include
using namespace std;
int d[20][20],dp[1<<11][20];
int n,m;...
分类:
其他好文 时间:
2014-07-27 11:17:42
阅读次数:
176
题解:给出了二叉树的中序和后序,重建二叉树,输出路径和最短的叶子的值。
两个模板:
给出前序和中序建树:
Node* build (int n, int* preo, int* ino) {
Node* node = new Node;
int i = 0;
if (n <= 0)
return NULL;
while (ino[i] != p...
分类:
其他好文 时间:
2014-07-25 11:26:21
阅读次数:
175
代码测试环境:Hadoop2.4应用场景:当需要定制输出数据格式时可以采用此技巧,包括定制输出数据的展现形式,输出路径,输出文件名称等。Hadoop内置的输出文件格式有:1)FileOutputFormat 常用的父类;2)TextOutputFormat 默认输出字符串输出格式;3)SequenceFileOutputFormat 序列化文件输出;4)MultipleOutputs 可以把输出...
分类:
其他好文 时间:
2014-07-24 17:47:36
阅读次数:
298
这题 是被我自己搞复杂了....太SB了....还是porker的关于输出路径的简洁 有效多了 touch me#include #include #include #include using namespace std;int ans, n, m;const int size = 110;...
分类:
其他好文 时间:
2014-07-24 05:01:48
阅读次数:
362
其实zoj 3415不是应该叫Yu Zhou吗。。。碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞。参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒)四五次才上来写这份有抄袭嫌疑的题解。。。这2题很类似,多校的rating相当于强化版,不过原理都一...
分类:
其他好文 时间:
2014-07-23 22:20:07
阅读次数:
217
强连通算法判断是否满足2-sat,然后反向建图,拓扑排序+染色。
一种选择是从 起点开始,另一种是终点-持续时间那个点 开始。
若2个婚礼的某2种时间线段相交,则有矛盾,建边。
容易出错的地方就在于判断线段相交。
若s1
输出路径的做法可以参考论文2-SAT解法浅析
#include
#include
#include
#include
#include
#include
#...
分类:
其他好文 时间:
2014-07-23 16:39:31
阅读次数:
262
本文出自:http://blog.csdn.net/svitter
题目:让你从(0, 0)走到(4,4),并且输出路径。输入数据:二位数组的迷宫;输出数据:路径;
题解:简单的BFS
注意:
1.去重;
2.墙不能走;
3.记录前一个节点
代码:
#include
#include
#include
using namespace std;
int ma...
分类:
其他好文 时间:
2014-07-22 14:16:04
阅读次数:
196
集合上的dp,看小紫书想了好久~
有n个物体,m个特征,最少询问多少次能保证猜到是哪个问题。
首先在读入的时候将每个物体转化为一个二进制整数,用一个集合s来表示已经询问了哪些特征。
用d(s,a)来表示询问了集合s的特征,有集合a个特征已经具备,还需要问多少个特征的最小值。a一定为s的子集。
则状态方程为 d(s,a) = min{ max(d(s+{k},a+{k}),(s+{k},a...
分类:
其他好文 时间:
2014-07-21 23:33:05
阅读次数:
244