POJ2279杨氏矩阵+钩子定理
题目:http://poj.org/problem?id=2279
有dp做法,但会MLE。
dp的思想很好,是通过 “按身高由小到大往进放” 把 “身高小于” 的条件转化成 “放进去的先后” ,于是又变成 “当前位置的上边和左边是否已放” 。
“左边” 通过对每一行长度的记录;“上边” 通过与上一行长度的比较,就可以状态转移了。
正解是用公式。杨氏矩阵(虽然没用上)+钩子公式。
dp代码:
#include<iostream>
#include<cstdio>
using namespace std;
int n,k,lm[];
unsigned long long d[][][][][];
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=k;i++)
scanf("%d",&lm[i]);
d[][][][][]=;
for(int i=;i<=lm[];i++)
for(int j=;j<=lm[]&&j<=i&&i+j<=n;j++)
for(int r=;r<=lm[]&&r<=j&&i+j+r<=n;r++)
for(int l=;l<=lm[]&&l<=r&&i+j+r+l<=n;l++)
for(int k=;k<=lm[]&&k<=l&&i+j+r+l+k<=n;k++)
{
d[i][j][r][l][k]+=d[i-][j][r][l][k];
if(j>)d[i][j][r][l][k]+=d[i][j-][r][l][k];
if(r>)d[i][j][r][l][k]+=d[i][j][r-][l][k];
if(l>)d[i][j][r][l][k]+=d[i][j][r][l-][k];
if(k>)d[i][j][r][l][k]+=d[i][j][r][l][k-];
}
printf("%lld",d[lm[]][lm[]][lm[]][lm[]][lm[]]);
return ;
}
公式代码:
#include<iostream>
#include<cstdio>
#define ull unsigned long long
using namespace std;
ull n,k,r,c[],a[][],cnt;
ull gcd(ull a,ull b)
{
return b==?a:gcd(b,a%b);
}
int main()
{
while()
{
scanf("%lld",&n);
if(!n)return ;
for(int i=;i<=n;i++)
{
scanf("%lld",&c[i]);
for(int j=;j<=c[i];j++)
a[i][j]=c[i]-j;
}
k=;r=;cnt=;
for(int i=n;i;i--)
{
for(int j=;j<=c[i];j++)
{
for(int l=i;l;l--)
a[l][j]++;
ull gd=gcd(k*(++cnt),r*a[i][j]);
k=k*(cnt)/gd;
r=r*a[i][j]/gd;
// printf("i=%d j=%d a=%lld k=%lld r=%lld\n",i,j,a[i][j],k,r);
}
}
printf("%lld\n",k/r);
}
}
POJ2279杨氏矩阵+钩子定理的更多相关文章
- HihoCoder 1480:矩阵填数 (杨氏矩阵 || 钩子公式 + 筛逆元)
描述 小Hi在玩一个游戏,他需要把1, 2, 3, ... NM填入一个N行M列的矩阵中,使得矩阵每一行从左到右.每一列从上到下都是递增的. 例如如下是3x3的一种填法: 136 247 589 给定 ...
- poj2279排队——杨氏矩阵与钩子公式(DP爆内存)
题目:http://poj.org/problem?id=2279 书上的DP做法会爆内存,尝试写了一个,过了样例. 转载: 代码如下: #include<iostream> #inclu ...
- 杨氏矩阵:查找x是否在矩阵中,第K大数
参考:http://xudacheng06.blog.163.com/blog/static/4894143320127891610158/ 杨氏矩阵(Young Tableau)是一个很奇妙的数据结 ...
- 杨氏矩阵定义及其查找的实现C++
先介绍一下这个数据结构的定义,Young Tableau有一个m*n的矩阵,然后有一数组 a[k], 其中 k<=m*n ,然后把a[k]中的数填入 m*n 的矩阵中,填充规则为: 1. 每一 ...
- BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3543 Solved: 1953 [Submit][Statu ...
- 【杨氏矩阵+勾长公式】POJ 2279 Mr. Young's Picture Permutations
Description Mr. Young wishes to take a picture of his class. The students will stand in rows with ea ...
- [spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)
In some countries building highways takes a lot of time... Maybe that's because there are many possi ...
- 杨氏矩阵查找元素位置Java实现
杨氏矩阵是一个二维矩阵,特点是每一行的右边的元素比左边的大,每一列下面的元素比上面的大: 比如 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 假设要查找的变量为target ...
- BZOJ 4766: 文艺计算姬 [矩阵树定理 快速乘]
传送门 题意: 给定一个一边点数为n,另一边点数为m,共有n*m条边的带标号完全二分图$K_{n,m}$ 求生成树个数 1 <= n,m,p <= 10^18 显然不能暴力上矩阵树定理 看 ...
随机推荐
- EBS R12使用接口表往已存在的供应商地址下创建新的地点
在供应商 "测试供应商A" 下已经有了两个地址,分别为 "地址A","地址B",现在由于某些原因,需要在地址A下面创建新的地点. 由于业务需 ...
- mysql 查询某一主键在那些表中中被设置为外键了
use information_schema; show tables; select * from KEY_COLUMN_USAGE where COLUMN_NAME='areaid';
- vue中上传文件相同文件名没反应
vue项目中会遇到上传文件的需求,jquery会有一些插件很方便,如果不使用插件网上的方法没有太容易的而且很多是原生JS或者基于jQuery操作dom结构的.那么在vue项目中如何实现呢,还有如何模拟 ...
- javascript数据结构——栈
栈是一种高效的数据结构,数据只能在栈顶添加或删除,所以这样操作很快,也很容易实现.栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用.接下来,用JavaScript实现一个栈的数据结构. ...
- CCF 高速公路 tarjan求强连通分量
问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的 ...
- html <a>标签介绍
<a href="javascript:void(0)" click="function(){}" />= a 标签样式 一组专门的预定义的 ...
- poj3020 二分图匹配 最大独立集
这是一道水题, 这里是最大流解法,之后再补 坑在又忘了反向建边了 题意:给你二维bool数组,让你求出能用多米诺骨牌覆盖所有 1 且骨牌最少的放法(因为多米诺骨牌1*2的结构方便描述,原题没有),原本 ...
- 20165210 Java第六周学习总结
20165210 Java第六周学习总结 教材学习内容 第八章学习总结 String类: 构造String对象: 1. 常量对象 2. String对象 3. 引用String常量 字符串的并置: S ...
- runtime error (运行时错误)
比如说: ①除以零 ②数组越界:int a[3]; a[10000000]=10; ③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+10000 ...
- mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系
mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系 我们先来看一个公式:Mipiclock = [ (width+hsync+hfp+hbp) x (height+vsync+vfp+vb ...