组合数学 CSU2049 象棋

2049: 象棋

Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 188     Solved: 48    


Description

車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子。一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数。他经过思考,得出了答案。但他仍不满足,想增加一个条件:对于任何一个車A,如果有其他一个車B在它的上方(車B行号小于車A),那么車A必须在車B的右边(車A列号大于車B)。
现在要问问你,满足要求的方案数是多少 。

Input

第一行一个正整数T,表示数据组数。( T<=10)
对于每组数据:一行,两个正整数N和M(N<=100000,M<=100000)。

Output

对于每组数据输出一行,代表方案数模1000000007(10^9+7)。

Sample Input

1
1 1

Sample Output

1

 

花了半天图,想着dp推一推这样子,然而好蠢,最后画表找得规律答案即为组合数。

假设行数大于列数,n<m,那么就是从m行中选n行,选完之后因为条件“对于任何一个車A,如果有其他一个車B在它的上方(車B行号小于車A),那么車A必须在車B的右边(車A列号大于車B)”,这n行只有一种排列方式。所以是C(n,m)。

我真是太弱太愚钝辽哭死。

然后就是阶乘、阶乘逆元和组合数的计算辽。

 

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn=1e5+10;
const long mod=1000000007;

int n,m;
long long fac[maxn],inv[maxn];

long long qpow(long long x,long long n)
{
    long long ans=1,a=x;
    while(n){
        if(n&1){
            ans*=a;
            ans%=mod;
        }
        a=(a*a)%mod;
        n>>=1;
    }
    return ans;
}

long long C(int x,int y)
{
    return ((fac[y]*inv[y-x]%mod)*inv[x])%mod;
}

int main()
{
    int t;

    scanf("%d",&t);
    fac[0]=1;
    for(int i=1;i<maxn;++i){
        fac[i]=fac[i-1]*i;
        fac[i]%=mod;
    }
    inv[maxn-1]=qpow(fac[maxn-1],mod-2);
    for(int i=maxn-1;i;--i){
        inv[i-1]=inv[i]*i;
        inv[i-1]%=mod;
    }
    while(t--){
        scanf("%d%d",&n,&m);
        if(n>m) swap(n,m);
        printf("%lld\n",C(n,m));
    }

    return 0;
}

 

本书是《组合数学》第3版的修订版,全书共分8章,分别是:排列与组合、递推关系与母函数、容斥原理与鸽巢原理、burnside引理与polya定理、区组设计、线性规划、编码简介、组合算法简介。丰富的实例及理论和实际相结合是本书一大特点,有利于对问题的深入理解。. 本书是计算机系本科生和研究生的教学用书,也可作为数学专业师生的教学参考书。 目录回到顶部↑ 第1章 排列与组合. 1.1 加法法则与乘法法则 1.2 一一对应 1.3 排列与组合 1.3.1 排列与组合的模型 1.3.2 排列与组合问题的举伊 1.4 圆周排列 1.5 排列的生成算法 1.5.1 序数法 1.5.2 字典序法 1.5.3 换位法 1.6 允许重复的组合与不相邻的组合 1.6.1 允许重复的组合 1.6.2 不相邻的组合 1.6.3 线性方程的整数解的个数问题 1.6.4 组合的生成 1.7 组合意义的解释 1.8 应用举例 1.9 stirling公式 1.9.1 wallis公式 .1.9.2 stirling公式的证明 习题 第2章 递推关系与母函数 2.1 递推关系 2.2 母函数 2.3 fibonacci序列 2.3.1 fibonacci序列的递推关系 2.3.2 若干等式 2.4 优选法与fibonacci序列的应用 2.4.1 优选法 2.4.2 优选法的步骤 2.4.3 fibonacci的应用 2.5 母函数的性质 2.6 线性常系数齐次递推关系 2.7 关于线性常系数非齐次递推关系 2.8 整数的拆分 2.9 ferrers图像 2.10 拆分数估计 2.11 指数型母函数 2.11.1 问题的提出 2.11.2 指数型母函数的定义 2.12 广义二项式定理 2.13 应用举例 2.14 非线性递推关系举例 2.14.1 stirling数 2.14.2 catalan数 2.14.3 举例 2.15 递推关系解法的补充 习题 第3章 容斥原理与鸽巢原理 3.1 demorgan定理 3.2 容斥定理 3.3 容斥原理举例 3.4 棋盘多项式与有限制条件的排列 3.5 有禁区的排列 3.6 广义的容斥原理 3.6.1 容斥原理的推广 3.6.2 一般公式 3.7 广义容斥原理的应用 3.8 第二类stirling数的展开式 3.9 欧拉函数φ(n) 3.10 n对夫妻问题 3.11 mobius反演定理 3.12 鸽巢原理 3.13 鸽巢原理举例 3.14 鸽巢原理的推广 3.14.1 推广形式之一 3.14.2 应用举例 3.14.3 推广形式之二 3.15 ramsey数 3.15.1 ramsey问题 3.15.2 ramsey数 习题 第4章 burnside引理与polya定理 4.1 群的概念 4.1.1 定义 4.1.2 群的基本性质 4.2 置换群 4.3 循环、奇循环与偶循环 4.4 burnside引理 4.4.1 若干概念 4.4.2 重要定理 4.4.3 举例说明.. 4.5 polya定理 4.6 举例 4.7 母函数形式的polya定理 4.8 图的计数 4.9 polya定理的若干推广 习题 第5章 区组设计 5.1 问题的提出 5.2 拉丁方与正交的拉丁方 5.2.1 问题的引入 5.2.2 正交拉丁方及其性质 5.3 域的概念 5.4 galois域gf(pm) 5.5 正交拉丁方的构造 5.6 正交拉丁方的应用举例 5.7 均衡不完全的区组设计 5.7.1 基本概念 5.7.2 (b,u,r,k,λ)-设计 5.8 区组设计的构成方法 5.9 steiner三元素 5.10 kirkman女生问题 习题 第6章 线性规划 6.1 问题的提出 6.2 线性规划的问题 6.3 凸集 6.4 线性规划的几何意义 6.5 单纯形法的理论基础 6.5.1 松弛变量 6.5.2 解的充要条件 6.6 单纯形法与单纯形表格 6.7 改善的单纯形法 6.8 对偶概念 6.9 对偶单纯形法 习题 第7章 编码简介 7.1 基本概念 7.2 对称二元信道 7.3 纠错码 7.3.1 最近邻法则 7.3.2 hamming不等式 7.4 若干简单的编码 7.4.1 重复码 7.4.2 奇偶校验码 7.5 线性码 7.5.1 生成矩阵与校验矩阵 7.5.2 关于生成矩阵和校验矩阵的定理 7.5.3 译码步骤 7.6 hamming码 7.7 bch码 习题 第8章 组合算法简介 8.1 归并排序 8.1.1 算法 8.1.2 举例 8.1.3 复杂性分析 8.2 快速排序 8.2.1 算法的描述 8.2.2 复杂性分析 8.3 ford-johnson排序法 8.4 排序的复杂性下界 8.5 求第是个元素 8.6 排序网络 8.6.1 0-1原理 8.6.2 bn网络 8.6.3 复杂性分析 8.6.4 batcher奇偶归并网络 8.7 快速傅里叶变换 8.7.1 问题的提出 8.7.2 预备定理 8.7.3 快速算法 8.7.4 复杂性分析 8.8 dfs算法 8.9 bfs算法 8.10 αβ剪技术 8.11 状态与图 8.12 分支定界法 8.12.1 tsm问题 8.12.2 任务安排问题 8.13 最短树与kruskal算法 8.14 huffman树 8.15 多段判决 8.15.1 问题的提出 8.15.2 最佳原理 8.15.3 矩阵链积问题 8.15.4 图的两点间最短路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值