POJ2779 线性DP 或 杨氏三角 和 钩子公式
本来就想回顾一下基础的线性DP谁知道今早碰到的都是这种大难题,QQQQ,不会
这个也没有去理解线性DP的解法,了解了杨氏三角和钩子公式,做出了POJ2779
杨氏矩阵和勾长公式
杨氏矩阵又叫杨氏图表,它是这样一个矩阵,满足条件:
(1)如果格子(i,j)没有元素,则它右边和上边的相邻格子也一定没有元素。
(2)如果格子(i,j)有元素a[i][j],则它右边和上边的相邻格子要么没有元素,要么有元素且比a[i][j]大。
1 ~ n所组成杨氏矩阵的个数可以通过下面的递推式得到:
如图就是n=3时的杨氏矩阵。
下面介绍一个公式,那就是著名的钩子公式。
对于给定形状,不同的杨氏矩阵的个数为:n!除以每个格子的钩子长度加1的积。其中钩子长度定义为该格子
右边的格子数和它上边的格子数之和。
钩子公式:res=n! / (hock[1]*hock[2]*.....hock[n]);
hock[i]=在其上方和右方的所有个数+1;
reference : 咿呀而已
知道了这个就能后解出来了
奥,有一个地方要注意就是res=n! / (hock[1]*hock[2]*.....hock[n]);
为了防止分子或分母的越界情况,要进行单一元素的约分化简;很好理解看代码就ok
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int gcd(int a,int b)
{
return b == ? a : gcd(b,a % b);
} int d[];
int num[]; int main()
{
int n;
while(~scanf("%d",&n) && n)//行数
{
for(int i = ;i <= n;i++)
{
scanf("%d",&d[i]);//行长度
}
int tot = ;
memset(num,,sizeof(num));
//计算hock值————
long long t1,t2;
for(int i = ;i <= n;i++)//遍历行数
{
for(int j = ;j <= d[i];j++)//遍历行上的铜须
{
tot++;
num[tot] += d[i] - j + ;//应该求右面
for(int k = i + ;k <= n;k++)//和下面的看后面的同学有没有满足的
{
if(d[k] >= j)
{
num[tot]++;
}
else////如果紧靠的都没有,下面的更不会有
{
break;
} }
}
}
//代入钩子公式——互相约分一下
t1 = ;
t2 = ;
for(int i = ;i <= tot;i++)
{
t1 *= i;
t2 *= num[i];
int t = gcd(t1,t2);
t1 /= t;
t2 /= t;
}
printf("%lld\n",t1 / t2); }return ;
}
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int gcd(int a,int b)
{
return b == ? a : gcd(b,a % b);
} int d[];
int num[]; int main()
{
int n;
while(~scanf("%d",&n) && n)//行数
{
for(int i = ;i <= n;i++)
{
scanf("%d",&d[i]);//行长度
}
int tot = ;
memset(num,,sizeof(num));
//计算hock值————
long long t1,t2;
for(int i = ;i <= n;i++)//遍历行数
{
for(int j = ;j <= d[i];j++)//遍历行上的铜须
{
tot++;
num[tot] += d[i] - j + ;//应该求右面
for(int k = i + ;k <= n;k++)//和下面的看后面的同学有没有满足的
{
if(d[k] >= j)
{
num[tot]++;
}
else////如果紧靠的都没有,下面的更不会有
{
break;
} }
}
}
//代入钩子公式——互相约分一下
t1 = ;
t2 = ;
for(int i = ;i <= tot;i++)
{
t1 *= i;
t2 *= num[i];
int t = gcd(t1,t2);
t1 /= t;
t2 /= t;
}
printf("%lld\n",t1 / t2); }return ;
}
POJ2779 线性DP 或 杨氏三角 和 钩子公式的更多相关文章
- poj2279排队——杨氏矩阵与钩子公式(DP爆内存)
题目:http://poj.org/problem?id=2279 书上的DP做法会爆内存,尝试写了一个,过了样例. 转载: 代码如下: #include<iostream> #inclu ...
- 线性DP详解
顾名思义,线性DP就是在一条线上进行DP,这里举一些典型的例子. LIS问题(最长上升子序列问题) 题目 给定一个长度为N的序列A,求最长的数值单调递增的子序列的长度. 上升子序列B可表示为B={Ak ...
- LightOJ1044 Palindrome Partitioning(区间DP+线性DP)
问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...
- Codeforces 176B (线性DP+字符串)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...
- hdu1712 线性dp
//Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...
- 动态规划——线性dp
我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...
- POJ 2479-Maximum sum(线性dp)
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33918 Accepted: 10504 Des ...
- poj 1050 To the Max(线性dp)
题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...
- nyoj44 子串和 线性DP
线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ...
随机推荐
- nginx日志
相关知识可参考文章:nginx日志格式及自定义日志配置 1.查看nginx的log配置 1)vim /etc/nginx/nginx.conf 打开为 user nginx;worker_proces ...
- hdu 2289 要二分的杯子
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2289 大意是 一个Cup,圆台形,给你它的顶部圆的半径,底部圆的半径,杯子的高度,和此时里面装的水的体 ...
- 基因组表达分析:如何选择RNA-seq vs. 芯片
基因组表达分析:如何选择RNA-seq vs. 芯片 发布日期:2017-03-29 10:00 DNA 芯片(上图左侧)由附着在表面的核酸探针组成.首先,从样品中提取 RNA 并转化为互补 DNA( ...
- LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题
#6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- PHP数组对象互转
//数组转对象 function array2object($array) { if (is_array($array)) { $obj = new StdClass(); foreach ($arr ...
- (转贴)fusionCharts属性参考API
一.FusionCharts的分类 关于FusionCharts的基本介绍我就不在这里浪费篇幅了,想了解的朋友自己去www.baigoogedu.com里面找吧.我就说说FusionCharts的官方 ...
- mybatis学习 十五 resultMap标签 一对多
多次查询,非联合查询版本 <resultMap type="teacher" id="techMap"> <id column="i ...
- 46.UISearchBar的placeholder字体颜色和背景颜色
1.改变searchbar的searchField属性 UITextField *searchField = [searchbar valueForKey:@"searchField&quo ...
- spring cloud 组件图
spring cloud 提供了一套微服务的框架. 上图就是微服务一些常用的组件. 1.EureKa 实现服务的注册和发现. 2.Ribbon 实现服务的调用(客户端实现负载均衡) 3.Feign 实 ...
- D. Three Pieces(dp,array用法,棋盘模型)
https://codeforces.com/contest/1065/problem/D 题意 给你一个方阵,里面的数字从1~nn,你需要从标号为1的格子依次走到标号为nn,在每一个格子你有两个决策 ...