“你们是虫子。”
三体文明利用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;
}