洛谷 P1497 木牛流马

P1497 木牛流马

题目描述

孔明造出了木牛流马

木牛者,方腹曲头,一脚四足,头入领中,舌著于腹。载多而行少,宜可大用,不可小使;特行者数十里,群行者二十里也。曲者为牛头,双者为牛脚,横者为牛领,转者为牛足,覆者为牛背,方者为牛腹,垂者为牛舌,曲者为牛肋,刻者为牛齿,立者为牛角,细者为牛鞅,摄者为牛秋轴。牛仰双辕,人行六尺,牛行四步。载一岁粮,日行二十里,而人不大劳。流马尺寸之数,肋长三尺五寸,广三寸,厚二寸二分,左右同。前轴孔分墨去头四寸,径中二寸。前脚孔分墨二寸,去前轴孔四寸五分,广一寸。前杠孔去前脚孔分墨二寸七分,孔长二寸,广一寸。后轴孔去前杠分墨一尺五分,大小与前同。后脚孔分墨去后轴孔三寸五分,大小与前同。后杠孔去后脚孔分墨二寸七分,后载克去后杠孔分墨四寸五分。前杠长一尺八寸,广二寸,厚一寸五分。后杠与等版方囊二枚,厚八分,长二尺七寸,高一尺六寸五分,广一尺六寸,每枚受米二斛三斗。从上杠孔去肋下七寸,前后同。上杠孔去下杠孔分墨一尺三寸,孔长一寸五分,广七分,八孔同。前后四脚,广二寸,厚一寸五分。形制如象,靬长四寸,径面四寸三分。孔径中三脚杠,长二尺一寸,广一寸五分,厚一寸四分,同杠耳。(《三国志·亮集载作木牛流马法》)

可是在现实中它有个缺陷,就是两个不能在同一行或同一列!

孔明兴高采烈的叫庞统来参观,孔明存心想难一难庞统,他把k个木牛流马放在一个大的n*n的格子地板上,并且给他们都染上色,想让庞统帮着算算有多少种不同的合理布局情况?

输入输出格式

输入格式:

 

第一行:n,k,h(h为有多少种颜色) n<=20

接下来h行为每种颜色多少个

 

输出格式:

 

合理布局情况总数

 

输入输出样例

输入样例#1: 复制
4 4 1
4
输出样例#1: 复制
24

说明

不需要高精度,并且孔明规定在格子地板上不能翻转,也就是说如果两种布局在翻转后是一样的仍算两种。

思路:数学‘

#include<iostream>
using namespace std;
int n,k,h;
int main(){
    cin>>n>>k>>h;
    long long ans1=1,k1=k;
    if(k>n){
        cout<<0<<endl;
        return 0;
    }
    for(int i=1;i<=h;i++){
        int x;
        cin>>x;
        for(int j=1;j<=x;j++)    ans1*=j;
    }
    long long ans2=1;
    for(int i=n;i>=n-k+1;i--)    ans2*=i*i;
    cout<<ans2/ans1<<endl;
    return 0;
}

 

posted @ 2017-11-19 15:28  一蓑烟雨任生平  阅读(345)  评论(0编辑  收藏  举报