UVA 11806 Cheerleaders (容斥原理
1.题意描述
本题大致意思是讲:给定一个广场,把它分为M行N列的正方形小框。现在给定有K个拉拉队员,每一个拉拉队员需要站在小框内进行表演。但是表演过程中有如下要求:
(1)每一个小框只能站立一个拉拉队员;
(2)广场的第一行,最后一行,第一列,最后一列都至少站有一个拉拉队员;
(3)站在广场的四个角落的拉拉队员可以认为是同时占据了一行和一列。

2.思路分析:
本题如果直接枚举的话难度很大并且会无从下手。那么我们是否可以采取逆向思考的方法来解决问题呢?我们可以用总的情况把不符合要求的减掉就行了。
首先我们如果不考虑任何约束条件,我们可以得出如下结论:

下载我们假定第一行不站拉拉队员的所有的站立方法有A种。最后一行不站拉拉队员的所有的方法有B种。第一列不站拉拉队员的所有的站立方法有C种。最后一列不站拉拉队员的站立方法有D种。
下面我们可以得出最后结果:

下面问题来了我们如何利用代码实现容斥原理呢?我们可以借用离散数学的最大项和最小项知识结合与运算来判断每一项的特征。比如说,含A的和1进行与运算。含B的与2进行与运算。含C的和4进行与运算。含D的和8进行与运算。
然后对于每一种状态,我们利用数字0-15来代替。
在进行这些工作之前,我们还要进行基础性工作,数据初始化和 组合数公式 打表。
A代表包括第一行
B代表包括最后一行
C代表包括第一列
D代表包括最后一列
#include <bits/stdc++.h>
using namespace std;
int n,m,k;
const int mod = ;
int c[][]; void init ()
{
c[][] = ;
for(int i=; i <= ;i++)
{
c[i][] = c[i][i] = ;
for(int j=;j < i;j++)
{
c[i][j] = (c[i-][j-] + c[i-][j])%mod;
}
}
} int main(){
init();
int t;
scanf("%d",&t);
for(int cas = ; cas <= t ;cas++)
{
scanf("%d %d %d",&n,&m,&k);
int sum = ;
for(int i=;i < ;i++)
{
int n1= n,m1= m;
int b = ;
if(i & )
b++,n1--;
if(i & )
b++,n1--;
if(i & )
b++,m1--;
if(i & )
b++,m1--;
if( b & )
sum = (sum +mod - c[n1*m1][k])%mod;
else
sum = (sum + c[n1*m1][k])%mod;
}
printf("Case %d: %d\n",cas,sum);
} return ;
}
UVA 11806 Cheerleaders (容斥原理的更多相关文章
- UVA 11806 Cheerleaders (容斥原理)
题意 一个n*m的区域内,放k个啦啦队员,第一行,最后一行,第一列,最后一列一定要放,一共有多少种方法. 思路 设A1表示第一行放,A2表示最后一行放,A3表示第一列放,A4表示最后一列放,则要求|A ...
- UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举)
UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举) 题意分析 给出n*m的矩形格子,给出k个点,每个格子里面可以放一个点.现在要求格子的最外围一圈的每行每列,至少要放一个 ...
- uva 11806 Cheerleaders
// uva 11806 Cheerleaders // // 题目大意: // // 给你n * m的矩形格子,要求放k个相同的石子,使得矩形的第一行 // 第一列,最后一行,最后一列都必须有石子. ...
- UVa 11806 Cheerleaders (容斥原理+二进制表示状态)
In most professional sporting events, cheerleaders play a major role in entertaining the spectators. ...
- UVA 11806 Cheerleaders (组合+容斥原理)
自己写的代码: #include <iostream> #include <stdio.h> #include <string.h> /* 题意:相当于在一个m*n ...
- UVa 11806 Cheerleaders (数论容斥原理)
题意:给定一个n*m的棋盘,要放k个石子,要求第一行,最后一行,第一列,最后一列都有石子,问有多少种放法. 析:容斥原理,集合A是第一行没有石子,集合B是最后一行没有石子,集合C是第一列没有石子,集合 ...
- UVA - 11806 Cheerleaders (容斥原理)
题意:在N*M个方格中放K个点,要求第一行,第一列,最后一行,最后一列必须放,问有多少种方法. 分析: 1.集合A,B,C,D分别代表第一行,第一列,最后一行,最后一列放. 则这四行必须放=随便放C[ ...
- 【递推】【组合数】【容斥原理】UVA - 11806 - Cheerleaders
http://www.cnblogs.com/khbcsu/p/4245943.html 本题如果直接枚举的话难度很大并且会无从下手.那么我们是否可以采取逆向思考的方法来解决问题呢?我们可以用总的情况 ...
- UVa 11806 - Cheerleaders (组合计数+容斥原理)
<训练指南>p.108 #include <cstdio> #include <cstring> #include <cstdlib> using na ...
随机推荐
- Win10系统 Eclipse 下'Publishing to Tomcat'has encountered a problem解决办法
首先贴出来错误: 详情为:Publishing failedCould not publish to the server.There were issues during deployment to ...
- beginAppearanceTransition
- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated __OSX_AVAILABLE_STARTING ...
- HTML5 脚本 语言代码 URL 符号实体 ASCII码 颜色
1.HTML<noscript> 标签 <noscript> 标签提供无法使用脚本时的替代内容,比方在浏览器禁用脚本时,或浏览器不支持客户端脚本时. <noscript& ...
- spring boot上传 下载图片。
https://blog.csdn.net/a625013/article/details/52414470 build.gradle buildscript { repositories { mav ...
- Sequence(priority_queue)
这题很智慧. VJ上4000多ms #include<cstdio> #include<algorithm> #include<queue> #include &l ...
- [LeetCode] 199. Binary Tree Right Side View_ Medium tag: BFS, Amazon
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- testng入门教程1在testng运行一个简单的testcase
在eclips运行java,创建一个Java类文件名TestNGSimpleTest C:\ > TestNG_WORKSPACE import org.testng.annotations. ...
- http协议基础(十)实体首部字段
1.定义 包含在请求和响应中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息 2.Allow 通知客户端能够支持的Request-URI指定资源的所有http方法:如果服务器接收到不支 ...
- SQL 中单引号 和一些特殊字符的处理
为了防止程序SQL语句错误以及SQL注入,单引号必须经过处理.有2种办法: 1.使用参数,比如SELECT * FROM yourTable WHERE name = @name; 在Java中就是用 ...
- C#导出Excel总结
一.asp.net中导出Execl的方法:在asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出流写给浏览器 ...