投票问题二

试题描述

欧阳文和欧阳武竞选学联主席,汪梁森负责唱票,共有m+n张,结果欧阳文获胜,已知欧阳文和欧阳武分别获得 m 张票和 n 张票(m>n)。现在请你计算在唱票过程中欧阳文的票数始终比欧阳武票数多的方案有多少种。

输入
一行,包括两个数,分别为 m 和 n 
输出
一个数,表示符合题目要求的方案数。
输入示例
5 3
输出示例
14
其他说明
数据范围:1 <= m,n < 100.
 

投票问题一的升级版!主要是数据的范围变大了,所以DFS已经搞不定了。

动态规划是一种更快的方法。

***************************(样例分析)

1 0
-----
2 0
-----
2 1(3 0)
-----
3 1(4 0)
-----
4 1,3 2(5 0)
-----
5 1,4 2
-----
5 2,4 3
-----
5 3

***************************

 1 #include <iostream>
 2 
 3 using namespace std;
 4 long long f[101][101];   //每轮唱票,f[欧阳文当前票数][欧阳武当前票数],当前共有多少种方案数 
 5 int main()
 6 {
 7     long long m,n;
 8     scanf("%lld%lld",&m,&n);
 9     f[1][0]=1;   //同样,第一票一定要给欧阳文 
10     for(int i=1;i<=m;i++)
11     {
12         for(int j=0;j<=n;j++)
13         {
14             if(i>j && (i!=1 || j!=0)) f[i][j]=f[i-1][j]+f[i][j-1];    //要达到当前的票数情况,要么是给欧阳文加上了一票,要么是给欧阳武加上了一票。 
15             else if(i<=j) break;
16         }
17     }
18     printf("%lld",f[m][n]);
19     //system("pause");
20     return 0;
21 }
投票问题二
原文地址:https://www.cnblogs.com/YXY-1211/p/5687275.html