poj2279排队——杨氏矩阵与钩子公式(DP爆内存)
题目: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)
{
if(a1)f[a1][a2][a3][a4][a5]+=f[a1-][a2][a3][a4][a5];
if(a2)f[a1][a2][a3][a4][a5]+=f[a1][a2-][a3][a4][a5];
if(a3)f[a1][a2][a3][a4][a5]+=f[a1][a2][a3-][a4][a5];
if(a4)f[a1][a2][a3][a4][a5]+=f[a1][a2][a3][a4-][a5];
if(a5)f[a1][a2][a3][a4][a5]+=f[a1][a2][a3][a4][a5-];
}
int main()
{
while(scanf("%lld",&k)==)
{
memset(f,,sizeof f);
memset(n,,sizeof n);//!!!
if(!k)return ;
for(ll i=;i<=k;i++)
scanf("%lld",&n[i]);
f[][][][][]=;
for(ll a1=;a1<=n[];a1++)
{
if(k>=)
for(ll a2=;a2<=n[]&&a2<=a1;a2++)
{
if(k>=)
for(ll a3=;a3<=n[]&&a3<=a2;a3++)
{
if(k>=)
for(ll a4=;a4<=n[]&&a4<=a3;a4++)
{
if(k>=)
for(ll a5=;a5<=n[]&&a5<=a4;a5++)
cl(a1,a2,a3,a4,a5);
else cl(a1,a2,a3,a4,);
}
else cl(a1,a2,a3,,);
}
else cl(a1,a2,,,);
}
else cl(a1,,,,);
}
printf("%lld\n",f[n[]][n[]][n[]][n[]][n[]]);
}
return ;
}
然后看到了“杨氏矩阵”与“钩子公式”。
转载:
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll unsigned long long
using namespace std;
int k,n[];
ll h[][],s1,s2;
ll gcd(ll x,ll y){
return x%y==?y:gcd(y,x%y);}
int main()
{
while(scanf("%d",&k)==)
{
if(!k)return ;
memset(h,,sizeof h);
memset(n,,sizeof n);//!
for(int i=;i<=k;i++)
scanf("%d",&n[i]);
for(int i=;i<=k;i++)
for(int j=;j<=n[i];j++)
{
h[i][j]=n[i]-j+;
int k=i+;
while(n[k]>=j)h[i][j]++,k++;
}
int t=;s1=;s2=;
for(int i=;i<=k;i++)
for(int j=;j<=n[i];j++)
{
t++;
s1*=t;s2*=h[i][j];
ll tmp=gcd(s1,s2);
s1/=tmp;s2/=tmp;
}
printf("%lld\n",s1/s2);
}
return ;
}
poj2279排队——杨氏矩阵与钩子公式(DP爆内存)的更多相关文章
- POJ2779 线性DP 或 杨氏三角 和 钩子公式
POJ2779 线性DP 或 杨氏三角 和 钩子公式 本来就想回顾一下基础的线性DP谁知道今早碰到的都是这种大难题,QQQQ,不会 这个也没有去理解线性DP的解法,了解了杨氏三角和钩子公式,做出了PO ...
- 【杨氏矩阵+勾长公式】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 ...
- hihocoder第238周:杨氏矩阵的个数
题目链接 问题描述 给定一个N行M列的矩阵,往里面填入$1-N\times M$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. ...
- POJ2279杨氏矩阵+钩子定理
题目:http://poj.org/problem?id=2279 有dp做法,但会MLE. dp的思想很好,是通过 “按身高由小到大往进放” 把 “身高小于” 的条件转化成 “放进去的先后” ,于是 ...
- HihoCoder 1480:矩阵填数 (杨氏矩阵 || 钩子公式 + 筛逆元)
描述 小Hi在玩一个游戏,他需要把1, 2, 3, ... NM填入一个N行M列的矩阵中,使得矩阵每一行从左到右.每一列从上到下都是递增的. 例如如下是3x3的一种填法: 136 247 589 给定 ...
- bzoj 2483: Pku2279 Mr. Young's Picture Permutations -- 钩子公式
2483: Pku2279 Mr. Young's Picture Permutations Time Limit: 1 Sec Memory Limit: 128 MB Description ...
- [集训]Trominoes,钩子公式运用
题意 用这四种骨牌密铺n*m的正方形矩阵,可以不选,求方案数.n*m<=1E8.多组询问. 思考 用如上的表达难以进行计算,尝试转化为一种新的组合解释. 若从右上角开始填起,我们强制要求里面的轮 ...
- 杨氏矩阵:查找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. 每一 ...
随机推荐
- java 获取微信 页面授权 获取用户openid
先调用微信的地址 跳转https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4b4009c4fce00e0c&redirect ...
- GIT简单使用——多人协作篇
多人协作的工作模式通常是这样:1.首先,可以试图用git push origin <branch-name>推送自己的修改:2.如果推送失败,则因为远程分支比你的本地更新,需要先用git ...
- 【Java】Spring Web MVC注意事项
本文内容可能是书上没有的,至少是<Java Web整合开发实践>这本书上没有的.这是初学Spring的笔者走过的弯路,谨记以自勉. 这两天学习Spring WebMVC,照着书依葫芦画瓢写 ...
- Nginx与Apache的Rewrite规则的区别
一.Nginx Rewrite规则相关指令 Nginx Rewrite规则相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令.一个简单的Nginx R ...
- golang截取字符串
对于字符串操作,截取字符串是一个常用的, 而当你需要截取字符串中的一部分时,可以使用像截取数组某部分那样来操作,示例代码如下: package main import "fmt" ...
- 【Atheros】如何在驱动中禁用ACK
上一篇文章讲了如何禁用载波侦听(CSMA)和退避(BACKOFF)的方法,这一篇介绍如何禁用ACK. 禁用ACK主要分为三部分: 1. 在发送端设置不等待ACK回来就继续发送: 2. 在接收端设置收到 ...
- 【转】windows下 ADT NDK开发环境配置
前提: 下载好Ecplise ADT并配置好开发环境,不会配置环境可以参考这里: http://blog.csdn.net/danfengw/article/details/47111107 步骤: ...
- 自动关闭AfxMessageBox对话框―模拟"回车" VC
有的时候,在程序里面调用太多的AfxMessageBox(非调试用),弹出的对话框要手动关闭,时间一长就感觉很繁琐.于是上网找了一些资料,发现有一个很简单的实现AfxMessageBox对话框自动关闭 ...
- iOS-代理托付的使用
#import "Rigester_ViewController.h" #import "Rigester_ViewController.h" @interfa ...
- 【BZOJ1146】[CTSC2008]网络管理Network 树状数组+DFS序+主席树
[BZOJ1146][CTSC2008]网络管理Network Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工 ...