投票问题一

试题描述

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

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

搜索(回溯法)+最优策略

 1 #include <iostream>
 2 
 3 using namespace std;
 4 int m,n,ans;
 5 void dfs(int x,int y)
 6 {
 7     if(x==m && y==n) {ans++;return ;}   //到达输入数据的票数 
 8     if(x>m || y>n) return ;   //超过票数的,直接退出 
 9     if(x<=y) dfs(1,0);   //当前方法行不通,退回去找另一种。回溯法 
10     else
11     {
12         if(x-y>1) dfs(x,y+1);   //如果当前欧阳文得票数比欧阳武多的票数多于1票,欧阳武加上一票 
13         dfs(x+1,y);   //否则为了保证欧阳文的票数始终多于欧阳武,欧阳文必须多一票 
14     }
15 }
16 int main()
17 {
18     scanf("%d%d",&m,&n);
19     dfs(1,0);  //为了保证欧阳文>欧阳武,欧阳文必须先加上一票 
20     printf("%d",ans);
21     //system("pause");
22     return 0;
23 }
投票问题一
原文地址:https://www.cnblogs.com/YXY-1211/p/5685312.html