容斥原理-shuoj—小明系列之高中时光

2023-12-22 17:32

本文主要是介绍容斥原理-shuoj—小明系列之高中时光,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

小明是一个聪明的小孩,虽然初中没有前三年学习成绩都很差。但是凭借这中考前最后几个月的冲刺还是考进了一所离家里比较近的普通高中。刚进入高中小明对课堂上老师讲授的问题依然没有什么兴趣。但是小明的聪明头脑依然不会停止转动。平时只要一闲下来就会去思考一些有趣的数学问题。今天小明学校开运动会,小明和他的同学们都坐在操场上观看开幕仪式。爱思考的小明又闲不住了,正好小明身边有k个石子,小明又在地板上画了一个m行n列的矩形网格,问题是有多少种方法可以将这k个石子放进网格里?现在要你写程序计算这个问题,看看你能不能借助计算机的力量算的比小明快。每个格子最多放一个石子,所有的石子必须用完,另外小明为了加大难度又加了一个条件:第一行、最后一行、第一列、最后一列都得有石子。

Input

输入第一行为数据组数T(T<=50),每组数据包含三个整数m,n,k(2<=m,n<=20,k<=500)。输入数据至文件结尾。

Output

对于每组数据输出一行,方案总数除以1000007的余数。

Sample Input

22 2 12 3 2

Sample Output

02

题解:
容斥原理(p(A+B) = p(A) + P(B) - P(AB))  (百度链接,点击打开链接)。

组合数 (百度链接 点击打开链接)

本题主要运用了容斥原理和求组合数(组合数链接,点击打开链接)。

现在具体分析这道题。

四个边上都有点的组合  =  总组合数  -  四个边中至少有一个边没有点的组合数。

将问题转化成 求:四个边中至少有一个边没有点的组合数

用数组 dp[ i ][ j ]来保存组合数C(i  ,  j)。

由容斥原理:

设A=  上边没点
    B = 下边没点
    C = 左边没点
    D = 右边没点
四个边中至少有一个边没有点  =  A + B +  C  + D -AB - AC - AD  - BC - BD  -CD + ABC + ABD + ACD + BCD - ABCD

分别求出上述独立事件的组合数即为最终结果。



代码如下:
#include<bits/stdc++.h>
using namespace std;
const int mod = 1000007;
long long dp[405][405];//将组合数打表
void com(){memset(dp,0,sizeof(dp));dp[0][0] = 1;dp[1][0] = 1;dp[1][1] = 1;for(int i = 2;i<401;i++){for(int j = 0;j<=i;j++){if(j == 0||j == i)dp[i][j] = 1;else dp[i][j] = (dp[i-1][j-1]+dp[i-1][j])%mod;}}
}
int main(){com();int T;cin>>T;while(T--){int m,n,k;cin>>m>>n>>k;if(k<2||k>m*n){cout<<0<<endl;continue;}long long sum;sum = (dp[n*m][k] - 2*dp[(n-1)*m][k] - 2*dp[n*(m-1)][k]+mod)%mod;while(sum<0)sum+=mod;sum = (sum + dp[(n-2)*m][k] + dp[(m-2)*n][k] + 4 * dp[(n-1)*(m-1)][k])%mod;while(sum<0)sum+=mod;sum = (sum - 2*dp[(n-2)*(m-1)][k] - 2*dp[(m-2)*(n-1)][k]+mod)%mod;while(sum<0)sum+=mod;sum = (sum + dp[(n-2)*(m-2)][k])%mod;while(sum<0)sum+=mod;cout<<sum<<endl;}
谢谢!

这篇关于容斥原理-shuoj—小明系列之高中时光的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/524835

相关文章

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言