hdu 1400 Mondriaan's Dream 解题报告】的更多相关文章

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1400 题目意思:给出一个h * w的 大 矩形,需要用 1 * 2 的砖块去填充这个大矩形,问填充的方案数是多少. 这题参考这里的: http://www.informatik.uni-ulm.de/acm/Locals/2000/solution/dream.c 把每一列的方格压缩为二进制编码,搜索上一列到当前列的状态转化是否能够成功.对于每一个位置,有3种放置方法:竖直.水平.不放 对每个方格,…
HDU - 1400 思路: 轮廓线dp入门题 #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #define rs rt<<1|1, m+1…
题意: 给出n*m (1≤n.m≤11)的方格棋盘,用1*2的长方形骨牌不重叠地覆盖这个棋盘,求覆盖满的方案数. Solution:                位运算+状态压缩+dp                二进制数(####)代表填完一行后这一行的状态,填满的地方为1,未填的地方为0.                显然在填第i行时,能改变的仅为第i-1行和第i行,因此要满足在填第i行时,第1~i-2行已经全部填满.                DFS一行的状态,要是填完第i行时,…
Mondriaan's Dream Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 783    Accepted Submission(s): 506 Problem Description Squares and rectangles fascinated the famous Dutch painter Piet Mondri…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 题目意思:有 n 个气球从左到右排成一排,编号依次为1,2,3,...,n.给出 n 对 a, b,表示编号为 a ~b 的气球被涂过一次色.n 次之后,问所有气球被上色的次数分别是多少. 典型的树状数组题!这种是:每次修改一个区间,问的是最后每个点被修改的次数.要注意update() 函数对 a 处理 的时候,向上修改的过程中把不必要的区间都加了一遍.例如对a = 2时,update修改了c…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 题目意思:给出一堆老鼠,假设有 n 只(输入n条信息后Ctrl+Z).每只老鼠有对应的weight 和 speed.现在需要从这 n 只老鼠的序列中,找出最长的一条序列,满足老鼠的weight严格递增,speed严格递减. 我们可以用一个结构体来保存老鼠的信息,包括weight, speed 以及 id(这个 id 是未排序之前的,为了输出最后信息).那么首先对 weight 进行递增排序,如…
题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1879 这条题目我的做法与解决Constructing Roads的解法是相同的. 0 表示没有连通:1代表已连通.在已连通村庄的道路的基础上,找到扩展出来的最小生成树. #include <iostream> #include <algorithm> using namespace std; + ; int rep[maxe], vis[maxe]; struct sets { in…
题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1233 并查集的运用, 实质就是求最小生成树.先对所有的村庄距离从小到大排序,然后判断村庄之间是否属于同一集合,不是则将距离相加.属于同一集合,说明村庄连成了环,就不符合树的定义了.这样扫描下来,就求得最小生成树了. 要特别注意的是,数组越界问题.这个得益于Dwylkz的指点.由于村庄最多假设为100,为了防止边数越界,数组应该开到100 * 100 (10000)左右. #include <ios…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 有关系(直接或间接均可)的人就坐在一张桌子,我们要统计的是最少需要的桌子数. 并查集的入门题,什么优化都无用到就可以直接过.实质上就是统计总共有多少个不相交的集合.比较可恶的是,题目中 There will be a blank line between two cases 是骗人的!!! #include <iostream> using namespace std; + ; int p[…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 第二条并查集,和畅通工程的解法类似.判断小希的迷宫不符合条件,即有回路.我的做法是,在合并两个集合的时候,当fx = fy,即有共同祖先的时候,说明就有回路. 这题有三点要注意:1.格式问题.题目说的“每两组数据之间有一个空行.”是会PE的!!实际上输出Yes或No之后加多个\n即可,不需要再画蛇添足再输多一个换行.  2. 当整数对列表只有0 0 时,要输出Yes   3.当不相交的集合个数…