题目:http://poj.org/problem?id=2279 书上的DP做法会爆内存,尝试写了一个,过了样例. 转载: 代码如下: #include<iostream> #include<cstdio> #include<cstring> #define ll unsigned long long using namespace std; ll k,n[],f[][][][][]; void cl(ll a1,ll a2,ll a3,ll a4,ll a5) {…
POJ2779 线性DP 或 杨氏三角 和 钩子公式 本来就想回顾一下基础的线性DP谁知道今早碰到的都是这种大难题,QQQQ,不会 这个也没有去理解线性DP的解法,了解了杨氏三角和钩子公式,做出了POJ2779 杨氏矩阵和勾长公式 杨氏矩阵又叫杨氏图表,它是这样一个矩阵,满足条件: (1)如果格子(i,j)没有元素,则它右边和上边的相邻格子也一定没有元素. (2)如果格子(i,j)有元素a[i][j],则它右边和上边的相邻格子要么没有元素,要么有元素且比a[i][j]大. 1 ~ n所组成杨氏矩…
Description Mr. Young wishes to take a picture of his class. The students will stand in rows with each row no longer than the row behind it and the left ends of the rows aligned. For instance, 12 students could be arranged in rows (from back to front…
题目链接 问题描述 给定一个N行M列的矩阵,往里面填入$1-N\times M$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. 此问题中描述的矩阵就是杨氏矩阵的特例.杨氏矩阵又叫杨氏图表. 杨氏图表,它是这样一个二维表,满足条件: (1)如果格子(i,j)没有元素,则它右边和上边的相邻格子也一定没有元素. (2)如果格子(i,j)有元素a[i,j],则它右边和上边的相邻格子要么没有元素,要么有元素且比a[i][j]大. 杨氏…
题目:http://poj.org/problem?id=2279 有dp做法,但会MLE. dp的思想很好,是通过 “按身高由小到大往进放” 把 “身高小于” 的条件转化成 “放进去的先后” ,于是又变成 “当前位置的上边和左边是否已放” . “左边” 通过对每一行长度的记录:“上边” 通过与上一行长度的比较,就可以状态转移了. 正解是用公式.杨氏矩阵(虽然没用上)+钩子公式. dp代码: #include<iostream> #include<cstdio> using nam…
描述 小Hi在玩一个游戏,他需要把1, 2, 3, ... NM填入一个N行M列的矩阵中,使得矩阵每一行从左到右.每一列从上到下都是递增的. 例如如下是3x3的一种填法: 136 247 589 给定N和M,小Hi希望知道一共有多少种不同的填法. 输入 一行包含两个整数N和M. 对于60%的数据 1 <= N <= 2, 1 <= M <= 100000 对于20%的数据 N = 3, 1 <= M <= 100 对于100%的数据 1 <= N <= 3,…
2483: Pku2279 Mr. Young's Picture Permutations Time Limit: 1 Sec  Memory Limit: 128 MB Description   Mr. Young wishes to take a picture of his class. The students will stand in rows with each row no longer than the row behind it and the left ends of…
题意 用这四种骨牌密铺n*m的正方形矩阵,可以不选,求方案数.n*m<=1E8.多组询问. 思考 用如上的表达难以进行计算,尝试转化为一种新的组合解释. 若从右上角开始填起,我们强制要求里面的轮廓线是单调增的.例如: 这种方法既不影响合法性,又不会重复计数. 可以看见,我们只关心轮廓线的形状,不关心其他部分的细节,因此我们可以用长度为n+m的01串来表示其反向.在此处,默认01串从左下角向右上角写起,0代表上,1代表右. 每填充一个骨牌,可以发现这样的转移: 0001->1000 0011-&…
参考:http://xudacheng06.blog.163.com/blog/static/4894143320127891610158/ 杨氏矩阵(Young Tableau)是一个很奇妙的数据结构,他类似于堆的结构,又类似于BST的结构,对于查找某些元素,它优于堆:对于插入.删除它比BST更方便. 首先介绍一下这个数据结构的定义,Young Tableau有一个m*n的矩阵,让后有一数组 a[k], 其中k<=m*n ,然后把a[k]中的数填入 m*n 的矩阵中,填充规则为(如图1-1):…
先介绍一下这个数据结构的定义,Young Tableau有一个m*n的矩阵,然后有一数组 a[k], 其中 k<=m*n ,然后把a[k]中的数填入 m*n 的矩阵中,填充规则为: 1.  每一行每一列都严格单调递增(有其他的版本是递减,其原理相同). 2.  如果将a[k]中的数填完后,矩阵中仍有空间,则填入 ∞. 举例: 这里主要给出杨氏矩阵的定义和查找 方法:理由每一列,没一行都是递增的,我们从左上角开始查找,不断的缩小矩阵的大小,最后只剩一1*1的矩阵. C++代码: #pragma o…