题意:给定n,m的矩阵,就是求稳定的骨牌完美覆盖,也就是相邻的两行或者两列都至少有一个骨牌 分析:第一步: 如果是单单求骨牌完美覆盖,请先去学基础的插头dp(其实也是基础的状压dp)骨牌覆盖 hihocoder有全套课程:骨牌覆盖(一, 二,三),状态压缩(二) 学好了以后,首先打一个预处理没有限制的表,由于赛后补题,我就没自己打,直接从网上粘的表 我的表来自:http://blog.csdn.net/u012015746/article/details/51971977 第二步: 这就是容斥的…
Solid Dominoes Tilings Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 235    Accepted Submission(s): 143 Problem Description Dominoes are rectangular tiles with nice 2 × 1 and 1 × 2 sizes. The…
题面传送门 鸽子 tzc 竟然来补题解了,奇迹奇迹( 神仙题 %%%%%%%%%%%% 解法 1: 首先一件很明显的事情是这个最小值可以通过类似 Kruskal 求最小生成树的方法求得.我们将所有边按边权从小到大排序并依次加入图中,如果加入边权为 \(v\) 的边后图首次连通,那么这张图对答案的贡献就是 \(v\). 那么怎么求这个期望值呢?我们考虑枚举加入多少条边后图首次连通,记这个数为 \(c\),那么这种情况对期望的贡献就是 \(\dfrac{c}{m+1}\),如果我们能再求出 \(p_…
第一步先打一个表,就是利用轮廓线DP去打一个没有管有没有分界线组合数量的表 #include<bits/stdc++.h> using namespace std; ; <<; ][maxn + ]; ][]; int solve(int n, int m){ == ) ; memset(dp, , sizeof(dp)); dp[][] = ; , ed = ; ; i < n; i ++){ ; j < m; j ++){ swap(ing, ed); memset…
9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/problem/214 题目大意: 请自行阅读. 题解: 官方题解讲得相当清楚,这里补充一下自己的一些理解. 首先来看\(O(2^{n-m}\times poly(n,m))\)的做法. 一种理解方式是官方题解. 设\(s\)为总共的课程个数(\(n\)个字符串的总长度),\(p(S)\)表示结尾位置为集合\(S\)的串全部匹配一共需要完成多少个不同的课程.设\(f(t…
题目链接:https://codeforces.com/contest/1245/problem/F 题意:给定一个区间(L,R),a.b两个数都是属于区间内的数,求满足 a + b = a ^ b 的实数对个数. 题解:看到求区间内满足一定条件的数的个数,应该用数位dp,数位dp基本操作是编写出solve函数调用记忆化搜索,那么考虑solve(R,R)是求0到R满足条件的答案,solve(L-1,R)求a属于0到L-1,b属于0到R满足条件的答案,solve(L-1,L-1)是ab都属于0到L…
容斥做法: 首先n^2搞出f[i][j]第i个物品,j体积的方案数. 去除每个物品贡献: 设个g[i][j]表示当i不选,j体积方案数(注意不是此时的范围相对于全局,而不是1---i) 那么我们用到一些容斥的思想 g[i][j]=f[n][j]-g[i][j-w[i]] 因为g[i][j-w[i]]即可表示当i选时的方案数(都是相对于全局的) 而且注意枚举顺序,我们要用当前g[i]的状态更新之后个g[i]的状态, 而且在j<w[i]的情况下g[i][j]=f[n][j] 注意取模..... 1…
传送门 前置知识 做这题前,您需要认识这个式子: \[ kthmax(S)=\sum_{\varnothing\neq T\subseteq S}{|T|-1\choose k-1} (-1)^{|T|-k} min(T) \] 如果不会可以来这里. 思路 题目要求第\(k\)小.为了方便,以下令\(k=n-k+1\),即变为求第\(k\)大. 很显然,这题是让我们求这个东西: \[ \sum_{T\neq\varnothing}{|T|-1\choose k-1} (-1)^{|T|-k} m…
总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比较容易了 举个例子:有一个大小为n*n的农田,我们可以在任意处种田,现在来描述一下某一行的某种状态: 设n = 9: 有二进制数 100011011(九位),每一位表示该农田是否被占用,1表示用了,0表示没用,这样一种状态就被我们表示出来了:见下表 列 数 1 2 3 4 5 6 7 8 二进制 1…
树形DP和状压DP和背包DP 树形\(DP\)和状压\(DP\)虽然在\(NOIp\)中考的不多,但是仍然是一个比较常用的算法,因此学好这两个\(DP\)也是很重要的.而背包\(DP\)虽然以前考的次数挺多的,但是现在基本上已经成了人人都能AK的题了,所以也不经常考了. 树形DP 树形DP这个非常特殊,他好像和是唯一一个用深搜实现的DP,所以我们学好它也是应该的,其特点是通过深搜. 思路 先找到一个根节点,然后预处理出所有子树的大小. 然后深搜把最底层的子节点得状态处理出来. 递归回溯到根节点,…