# UVA 题目10128 Queue（DP）

192人阅读 评论(0)

There is a queue with N people. Every person has a different heigth. We can see P people, when we
are looking from the beginning, and R people, when we are looking from the end. Its because they
are having different height and they are covering each other. How many different permutations of our
queue has such a interesting feature?
Input
The input consists of T test cases. The number of them (1 ≤ T ≤ 10000) is given on the first line of
the input file.
Each test case begins with a line containing a single integer number N that indicates the number
of people in a queue (1 ≤ N ≤ 13). Then follows line containing two integers. The first integer
corresponds to the number of people, that we can see looking from the beginning. The second integer
corresponds to the number of people, that we can see looking from the end.
Output
For every test case your program has to determine one integer. Print how many permutations of N
people we can see exactly P people from the beginning, and R people, when we are looking from the
end.
Sample Input
3
10 4 4
11 3 1
3 1 2
Sample Output
90720
1026576

1

ac代码

 16452698 10128 Queue Accepted C++ 0.003 2015-11-18 02:59:23

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
LL dp[22][22][22];
void fun()
{
int i,j,k;
dp[1][1][1]=1;
for(i=2;i<=13;i++)
{
for(j=1;j<=i;j++)
{
int r=i-j+1;
for(k=1;k<=r;k++)
{
dp[i][j][k]=dp[i-1][j][k-1]+dp[i-1][j-1][k]+(i-2)*dp[i-1][j][k];
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
fun();
while(t--)
{
int n,m,r;
scanf("%d%d%d",&n,&m,&r);
printf("%lld\n",dp[n][m][r]);
}
}


0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
其实
个人资料
• 访问：388125次
• 积分：14052
• 等级：
• 排名：第882名
• 原创：1054篇
• 转载：32篇
• 译文：0篇
• 评论：35条