POJ 2279 Mr. Young's Picture Permutations......杨氏矩阵+钩长公式??
2016-07-28 11:44
609 查看
传送门
题目大意:
给出n行,每行有人数限制num[i],并且num[i]>=num[i+1],总人数暂且称为tot=∑num[i],把1~tot这些数字填入矩阵,使得矩阵满足每行单调递增,每列单调递增,求满足要求的矩阵数目
分析:
额,伟大的杨氏矩阵和钩长公式告诉我们此题的解法:>_<
ans=tot!/sum[1]/sum[2]/sum[3]/……../sum[tot]
sum[i]=i号格子右边→_→的格子数+☟下边的格子数
代码如下:
by >o< neighthorn
题目大意:
给出n行,每行有人数限制num[i],并且num[i]>=num[i+1],总人数暂且称为tot=∑num[i],把1~tot这些数字填入矩阵,使得矩阵满足每行单调递增,每列单调递增,求满足要求的矩阵数目
分析:
额,伟大的杨氏矩阵和钩长公式告诉我们此题的解法:>_<
ans=tot!/sum[1]/sum[2]/sum[3]/……../sum[tot]
sum[i]=i号格子右边→_→的格子数+☟下边的格子数
代码如下:
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #define int __int64 using namespace std; const int maxn=30+5; int num[maxn],sum[maxn*maxn],n,cnt,x,y,tmp; inline int read(void){ char ch=getchar(); int f=1,x=0; while(!(ch>='0'&&ch<='9')){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return f*x; } int gcd(int a,int b){ return a%b==0 ? b : gcd(b,a%b); } signed main(void){ while(n=read()){ for(int i=1;i<=n;i++) num[i]=read(); memset(sum,0,sizeof(sum)),cnt=0,x=1,y=1; for(int i=1;i<=n;i++) for(int j=1;j<=num[i];j++){ cnt++; for(int k=i+1;k<=n;k++){ if(num[k]>=j) sum[cnt]++; else break; } sum[cnt]+=num[i]-j+1; } for(int i=1;i<=cnt;i++) x*=i,y*=sum[i],tmp=gcd(x,y),x/=tmp,y/=tmp; printf("%I64d\n",x/y); } return 0; }
by >o< neighthorn
相关文章推荐
- linux系统监控工具——Conky
- Hadoop序列化和反序列化
- mysql索引优化 btree rtree hash full-text
- 解决tomcat关于SSL的漏
- CI 分页类的使用
- 用C语言扩展lua模块(入门)
- 路由的设定,查看
- 【OpenJudge】c语言_计算三角形面积
- Maven Plugin execution not covered by lifecycle configuration
- maven
- struts.xml配置文件元素的说明
- java(优化15) 报错"java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher"解决方案
- 用.net在画出镂空图片
- 有趣的DP - 邮票问题
- activity and task
- Java Web学习(24): JSTL学习(二)
- ios基于UITabBarController实现tab页面切换
- 【SpringMVC】使用Maven搭建web3.0,且jdk为1.8的项目
- 41. First Missing Positive(Sort)
- 基础补充18:Lua的模块编写与module函数