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 显然不能暴力上矩阵树定理 看 ...
随机推荐
- nodejs初探一二
概念 简单来说,node.js 是一个让 JavaScript 运行在服务端的开发平台,让开发者通过JS编写服务端程序. 安装 从nodeJS官网下载对应平台的安装程序,安装完成后,打开命令行工具,然 ...
- 微信小程序--登录流程梳理
前言 微信小程序凡是需要记录用户信息都需要登录,但是也有几种不同的登录方式,但是在小程序部分的登录流程是一样的.之前就朦朦胧胧地用之前项目的逻辑改改直接用了,这个新项目要用就又结合官方文档重新梳理了下 ...
- Win10 dell驱动触摸板安装
Win10 dell驱动触摸板安装 在此之前安装驱动后要重启
- PHP:第三章——数组中的array_values
例: <?php header("Content-Type:text/html;charset=utf-8"); //array_value(); //功能:返回数组中所有的 ...
- HDU 2895 贪心 还是 大水题
DESCRIPTION:大意是给你两个字符串.编辑距离只有add和delete会产生.所以.编辑距离最短一定是两个字符串的长度差.然后...呵呵呵呵.... 猜题意就可以了...但是...我觉得这个题 ...
- SSO-基本概念
什么是单点登录 单点登录(Single Sign On) 简称为sso,是目前流行的企业业务整合的解决方案之一.SSO的定义是在多个引用系统中用户只需要登录一次就可以访问所有相互信任的应用系统. 单点 ...
- Openwrt Udev Configure(3)
1 Scope of Document This document describes how to write udev script, when enum usb device mayb ...
- Arrow function restore
Arrow function restore 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: function (x) { r ...
- Java——IO类 字符流概述
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- SharePoint Infopath表单服务-PowerShell
1. 激活可浏览的表单模板 Set-SPInfoPathFormsService -AllowUserFormBrowserEnabling $true -AllowUserFormBrowserRe ...