zstu深入浅出学算法020——DP——排队购票

Description

一常球赛开始前,售票工作正在进行中。每张球票为50元,现有k(1 <= k <= 30)人排队购票,其中n人手持50元的钱,剩余m人手持100元的钱,假设开始时售票处没有钱,求出售票处不出现找不开钱的不同排队种数(拿同样钞票面值的人换位置视为同一种排队)

Input

多组测试数据,先输入整数T表示组数,然后每组输入2个整数n和m

Output

对于每组测试数据输出1行,值为题目描述中的排队种数

Sample Input

2
1 2
1 1

Sample Output

0
1

HINT

 大意:DP是看两个状态之间的关系的不看整体,所以dp[i][j] = dp[i-1][j]是肯定满足的,如果n的数目大于等于m的话说明当前能找的开,dp[i][j] += dp[i][j-1];
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        int dp[30][30];
        memset(dp,0,sizeof(dp));
        int n,m;
        scanf("%d%d",&n,&m);
        if( n < m){
            printf("0
");
            continue;
        }
        for(int i = 0 ; i <= n ; i++){
            for(int j = 0; j <= m ; j++){
                if(i == 0) dp[i][j] = 0;
                else if( j == 0 && i !=0 ) dp[i][j] = 1;
                else   {
                  dp[i][j] = dp[i-1][j];
                  if( i >= j) dp[i][j] += dp[i][j-1];
                }

            }
        }
        printf("%d
",dp[n][m]);
    }
    return 0;
}
                
View Code
原文地址:https://www.cnblogs.com/zero-begin/p/4442362.html