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 显然不能暴力上矩阵树定理 看 ...
随机推荐
- mybatis标签之——<trim>
trim标记是一个格式化的标记,主要用于拼接sql的条件语句(前缀或后缀的添加或忽略),可以完成set或者是where标记的功能. trim属性主要有以下四个 prefix:前缀覆盖并增加其内容 ...
- (转载)SAPI 包含sphelper.h编译错误解决方案
[转]SAPI 包含sphelper.h编译错误解决方案 在使用Microsoft Speech SDK 5.1开发语音识别程序时,包含了头文件“sphelper.h”和库文件“sapi.lib”.编 ...
- freeradius的https查询功能
一.服务器要求 Radius服务器:centos6.6.ip.hostname.selinux disabled.stop iptables freeradius版本:3.0.12 二.源码安装fr ...
- 各种C#数组的定义和初始化
各种C#数组的定义和初始化2009-08-26 18:28 岁月联盟 字号:T | T一键收藏,随时查看,分享好友!本文介绍了C#数组定义和初始化,包括一维数组.交错数组和多维数组,供大家参考.AD: ...
- python3.6 ubuntu
apt-get install python3.6-dev 安装 pip install mysqlclient 必备
- C#并行开发_Thread/ThreadPool, Task/TaskFactory, Parallel
大家好,本次讨论的是C#中的并行开发,给力吧,随着并行的概念深入,哥也赶上这个潮流了,其实之前讨论C#的异步调用或者C#中BeginInvoke或者Invoke都已经涉及了部分本篇的内容. 参考书目: ...
- Centos中查看系统信息的常用命令
系统日志文件(可以通过cat或tail命令来查看) /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全 ...
- SMON进程、PMON进程、LGWR/ARCH
SMON 进程:system monitor instance monitor 系统监控.实例监控进程 说明及作用:在实例关闭时,会清理临时段,整理空闲空间free space; 实例非正常关闭后,启 ...
- OK335xS UART device registe hacking
/************************************************************************* * OK335xS UART device reg ...
- 查看camera设备-linux
前言 本文介绍如何在linux平台查看是否有camera外设. 操作过程 1.打开shell,输入以下命令: ls /dev/video* 即可查看是否有camera外设: 2.如果确实连接了came ...