三体·Round - 智子(Easy Version)

“你们是虫子。”

三体文明利用2个智子来监控PDC(行星防御理事会)和UN(联合国)中的重要人物,第一个智子监控PDC中的重要人物,第二个智子监控UN中的重要人物

PDC中,有n个重要人物,如维德,瓦季姆,程心等等 UN中,有m个重要人物,如萨伊,坎特,史强,罗辑等等

两个智子会生成各自的监控名单(设为A名单和B名单)。 每个智子监控的人数没有单独限制, 但是,由于某些原因,三体方面只能同时接收p个监控信息,也就是说,这两个智子最多一共只能监控p个人

两份名单合在一起,就是一个监控计划。

三体人想知道,监控计划一共有多少种? 两个监控计划不同,当且仅当存在一个智子监控的名单在两个计划中不相同。

一个智子的两份监控名单不相同,当且仅当存在某个重要人物(来自这个智子所应当监控的组织)出现在一个名单上,而在另外一个名单上没有出现。(可以参考样例解释)

显然,各个名单上的人数总和不能超过p,并且各个名单人数总和不能为空(这没有意义)(每一个智子监控的名单可以为空,但总的不能为空)

作为ETO一员的你,这是一个提升在主眼中地位的好机会。所以你主动请缨要来解决这个问题。

答案可能很大,你只需要告诉主,这个问题的答案对13331取模的结果。

输入数据

第一行两个正整数n,m,表示PDC和UN中重要人物的个数1<=n,m<=10001<=n,m<=1000
第二行一个正整数p,表示两个智子最多监视p个人1<=p<=n+m1<=p<=n+m

输出数据

输出一行一个数,表示答案对13331取模的结果

样例输入

 

2 1
2

样例输出

 

6

样例说明

设这三个人分别为a1,a2,b1
监控计划可以是:(两份名单用A,B集合表示)
A=∅,B=b1A=∅,B=b1
A=a1,B=∅A=a1,B=∅
A=a1,B=b1A=a1,B=b1
A=a2,B=∅A=a2,B=∅
A=a2,B=b1A=a2,B=b1
A=a1,a2,B=∅A=a1,a2,B=∅

一共六种

 

 

 

题解:

1.组合数

2.求解过程中注意的几点,

一个是名单最大不超过怕,也就是说总和可以小于p,所以使用两层循环,

还有就是n和m都有可能大于p;

#include <iostream>
#include <algorithm>
#define mod 13331
using namespace std;
long long  C[1002][1002];
int main() {
	long long  n,m,p;
	cin >> n >> m >> p;
	C[0][0] = 1;
	for (int i = 1; i <= 1000; i++) {
		for (int j = 0; j <= 1000; j++)
			C[i][j] = (C[i - 1][j] + C[i - 1][j - 1])%mod;
	}
	long  ans=0;
	for (int i = 0; i <= min(n,p); i++)
		for(int j=0;j<=min(p-i,m);j++)
			ans += C[n][i]*C[m][j]%mod;
	ans--; //去除两份名单都是空的情况
	cout << ans % mod << endl;
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值