# 【bzoj4742: [Usaco2016 Dec]Team Building】dp

## 4742: [Usaco2016 Dec]Team Building

Time Limit: 10 Sec   Memory Limit: 128 MB
Submit: 168   Solved: 98
[ Submit][ Status][ Discuss]

## Description

Every year, Farmer John brings his NN cows to compete for "best in show" at the state fair. His arch
-rival, Farmer Paul, brings his MM cows to compete as well (1≤N≤1000,1≤M≤1000).Each of the N+MN+
M cows at the event receive an individual integer score. However, the final competition this year wi
ll be determined based on teams of KK cows (1≤K≤10), as follows: Farmer John and Farmer Paul both
select teams of KK of their respective cows to compete. The cows on these two teams are then paired
off: the highest-scoring cow on FJ's team is paired with the highest-scoring cow on FP's team, the s
econd-highest-scoring cow on FJ's team is paired with the second-highest-scoring cow on FP's team, a
nd so on. FJ wins if in each of these pairs, his cow has the higher score.Please help FJ count the n
umber of different ways he and FP can choose their teams such that FJ will win the contest. That is,
each distinct pair (set of KK cows for FJ, set of KK cows for FP) where FJ wins should be counted.

(1 ≤ N ≤ 1000, 1 ≤ M ≤ 1000)。每只牛都有自己的分数。两人会选择K只牛组成队伍(1 ≤ K ≤ 10)，两队

## Input

The first line of input contains N, M, and K. The value of K will be no larger than N or M.
The next line contains the N scores of FJ's cows.
The final line contains the M scores of FP's cows.

## Output

Print the number of ways FJ and FP can pick teams such that FJ wins, modulo 1,000,000,009.

## Sample Input

10 10 3
1 2 2 6 6 7 8 9 14 17
1 3 8 10 10 16 16 18 19 19

## Sample Output

382

f[i][j][k]=f[i-1][j][k]+f[i][j-1][k]-f[i-1][j-1][k]+f[i-1][j-1][k-1]*(a[i]>b[j]);

（我加了个排序 ，应该是不用的）

#include<cstdio>
#include<algorithm>
#include<iostream>
#define MOD 1000000009
#define N 1050
using namespace std;
int n,m,k,a[N],b[N];
long long f[N][N][11];
bool cmp(int a,int b){
return a>b;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=m;i++) scanf("%d",&b[i]);
sort(a+1,a+1+n,cmp);
sort(b+1,b+1+m,cmp);
for(int i=0;i<=n;i++)for(int j=0;j<=m;j++) f[i][j][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int p=1;p<=min(k,min(i,j));p++)
f[i][j][p]=(MOD+f[i-1][j][p]+f[i][j-1][p]-f[i-1][j-1][p]+(a[i]>b[j])*f[i-1][j-1][p-1])%MOD;
printf("%d\n",f[n][m][k]);
}

• 点赞
• 评论
• 分享
x

海报分享

扫一扫，分享海报

• 收藏
• 手机看

分享到微信朋友圈

x

扫一扫，手机阅读

• 打赏

打赏

BinGoo0o0o

你的鼓励将是我创作的最大动力

C币 余额
2C币 4C币 6C币 10C币 20C币 50C币
• 一键三连

点赞Mark关注该博主, 随时了解TA的最新博文

03-10 7533
06-10 228
12-07 656
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客