【问题描述】

【题解】

先考虑一个最简单的情况。如一个n*n的棋盘。然后要放k个车。

我们可以先选出k行即C(n,k);

然后在列上对这k个棋子进行一次全排列即A(n,k);

比如k = 4;N=5

选的行为1,2,3,4

然后枚举的列1,2,3,4和4,3,2,1

前者表示第一行放在1,第二行放在2,。。。第4行放在4.(列)

后者表示第一行放在4,第二行放在3.。。。第4行放在1的位置.(列)

这是进行全排列的原因。

然后答案就是C(n,k)*A(n,k);

然后把原题的图切成下面的样子

然后在上面的小矩形内枚举放置i个棋子。

方案就是C(b,i)*A(a,i);

在下面。因为左边被占据了i列。所以下面可以用的只剩下a+c-i列。

可以看成是一个长为a+c-i,宽为d的矩形。

则在下面的方案为C(d,k-i)*A(a+c-i,k-i);

然后对于枚举的i,如果可行。则答案递增C(b,i)*A(a,i)*C(d,k-i)*A(a+c-i,k-i)

要记得取模。

然后组合数可以用C[i][j] = c[i-1][j]+c[i-1][j-1]得到。

然后因为

所以要求排列数可以用组合数乘上一个k!

一边取模就可以了。

然后因为C(b,i)*A(a,i)*C(d,k-i)*A(a+c-i,k-i) 中出现了a+c-i。所以把组合数开到[2000][2000]

不然会错!而且编译器不会告诉你数组越界了!

还有一种分法。

则对于枚举的i变成递增答案C(d,i)*A(c,i)+C(b+d-i,k-i)*A(a,k-i);

【代码】--按照第一种分法做的。

#include <cstdio>
#include <stdlib.h> const int mo = 100003;
long long A[2001][2001], C[2001][2001], N1[2001], ans = 0; //乘的时候可能会超过int类型所以用Longlong了。
int a, b, c, d, k; void init()
{
for (int i = 0; i <= 2000; i++) //获取组合数
C[i][0] = 1, C[i][i] = 1;
for (int i = 1; i <= 2000; i++)
for (int j = 1; j <= i; j++)
C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mo;
N1[0] = 1;
for (int i = 1; i <= 2000; i++) //获取1到2000的阶乘,当然都是取模后的结果。
N1[i] = (N1[i - 1] * i) % mo;
for (int i = 0; i <= 2000; i++) //用相应的组合数来获取排列数。
for (int j = 0; j <= i; j++)
A[i][j] = (C[i][j] * N1[j]) % mo;
} int min(int a, int b) //返回a和b中的较小值。
{
return a>b ? b : a;
} void input_data()
{
scanf("%d%d%d%d%d", &a, &b, &c, &d, &k);//输入数据
int maxk = min(a, b); //这是在上面那个小矩形内能够放下的最大的车的数量
for (int i = 0; i <= maxk; i++) //枚举在那个小矩形内放几个车
{
if ((k - i) > d) continue;
if ((a + c - i)<(k - i)) continue; //如果下面的大矩形不能放下剩余的k-i个车则跳过
ans = (ans + ((((C[b][i] * A[a][i]) % mo)*((C[d][k - i] * A[a + c - i][k - i]) % mo)) % mo)) % mo;
//否则按照题解的思路递增答案。
}
} void output_ans()
{
printf("%I64d", ans);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
//freopen("F:\\rush_out.txt", "w", stdout);
//freopen("place.in","r",stdin);
//freopen("place.out","w",stdout);
init();
input_data();
output_ans();
//fclose(stdin);
// fclose(stdout);
return 0;
}

【u022】车的放置的更多相关文章

  1. P1350 车的放置

    P1350 车的放置 设$f[i][j]$为当前推到第$i$列,该列高度$h$,已经放了$j$个车的方案数 则$f[i][j]=f[i-1][j]+f[i-1][j-1]*(h-j+1)$ 但是我们发 ...

  2. 洛谷 P1350 车的放置

    洛谷 P1350 车的放置 题目描述 有下面这样的一个网格棋盘,a,b,c,d表示了对应边长度,也就是对应格子数. 当a=b=c=d=2时,对应下面这样一个棋盘 要在这个棋盘上放K个相互不攻击的车,也 ...

  3. 【CH6802】车的放置

    题目大意:给定一个 N*M 的棋盘,棋盘上有些点不能放置任何东西,现在在棋盘上放置一些车,问最多可以放置多少个车而不会互相攻击. 题解:将放置一个车看作连接一条无向边,因为每一行和每一列之间只能放置一 ...

  4. 【题解】洛谷P1350 车的放置(矩阵公式推导)

    洛谷P1350:https://www.luogu.org/problemnew/show/P1350 思路 把矩阵分为上下两块N与M 放在N中的有i辆车 则放在M中有k-i辆车 N的长为a   宽为 ...

  5. hdu1281(棋盘游戏,车的放置)

    Problem Description 给定一个n * m的棋盘,在棋盘里放尽量多的国际象棋中的车,使他们不能相互攻击 已知有些格子不能放置,问最多能放置多少个车 并计算出必须棋盘上的必须点. Inp ...

  6. loj题目总览

    --DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[23/34] [178/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活 ...

  7. XVIII Open Cup named after E.V. Pankratiev. GP of Romania

    A. Balance 不难发现确定第一行第一列后即可确定全部,列不等式单纯形求解线性规划即可. #include<cstdio> #include<algorithm> usi ...

  8. YBT 6 数学基础

    $补+写题ing$ 第 1 章 快速幂 序列的第 k 个数 link $solution:$ 板子 A 的 B 次方 link $solution:$ 板子 [NOIP2013] 转圈游戏 link ...

  9. CSU训练分类

    √√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 ...

随机推荐

  1. 洛谷 P2240 数的计数数据加强版

    P2240 数的计数数据加强版 题目背景 无 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1500001),然后对此自然数按照如下方法进行处理: ...

  2. 【Todo】Zookeeper系列文章

    http://nileader.blog.51cto.com/1381108/1068033

  3. HDU 4927 Series 1(推理+大数)

    HDU 4927 Series 1 题目链接 题意:给定一个序列,要求不断求差值序列.直到剩一个,输出这个数字 思路:因为有高精度一步.所以要推理一下公式,事实上纸上模拟一下非常easy推出公式就是一 ...

  4. 28. Spring Boot配置方式

    转自:https://blog.csdn.net/webzhuce/article/details/54564019

  5. Mongodb总结3-稍微封装一下

    上次发表的2,纯粹是Demo,演示API的用法. 今天,稍微封装了下,看得更清楚. 考虑到不容易做得很有通用性,所以封装的一般,换种场景需要直接修改代码,但是有一部分是可以复用的. 最近项目,很可能只 ...

  6. jdk目录详解及其使用方法

    jdk目录详解 jdk目录详解 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境.它由一个处于操作系统层之上的 ...

  7. 页面事件(Init,Load,PreRender)执行顺序

    简介 对由 Microsoft® Internet 信息服务 (IIS) 处理的 Microsoft® ASP.NET 页面的每个请求都会被移交到 ASP.NET HTTP 管道.HTTP 管道由一系 ...

  8. PyCharm下载主题以及个性化设置(详细)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.下载主题 1.在http://www.themesmap.com/theme.html上选择自己喜欢的主题点进去后进行下载. ...

  9. P2P平台很赚钱么?

    最近几年,搞P2P网贷和财富投资相关的金融周边公司,多了很多,楼下门店和电梯里的贷款小广告,真是多啊. 大家都去搞一件事的时候,很可能是大家都觉得这件事有利可图.但事实是,赚钱的总是少数,看到别人搞的 ...

  10. BigBoss按键映射

    // BigBoss: SBSettings Toggle Spec 按键映射 http://thebigboss.org/guides-iphone-ipod-ipad/sbsettings-tog ...