【水题】投票问题(一)
投票问题(一)
【试题描述】
欧阳文和欧阳武竞选学联主席,汪梁森负责唱票,共有m+n张,结果欧阳文获胜,已知欧阳文和欧阳武分别获得 m 张票和 n 张票(m>n)。现在请你计算在唱票过程中欧阳文的票数始终比欧阳武票数多的方案有多少种。
【输入要求】
一行,包括两个数,分别为 m 和 n
【输出要求】
一个数,表示符合题目要求的方案数。
【输入实例】
2 1
【输出实例】
1
【其他说明】
数据范围:1 <= m,n < 20 .
【试题分析】
第一眼就可以看出是一道非常水的搜索题,如果说到了DFS后你还没有思路的话,请你赶快回去复习复习搜索算法,这是非常重要的一个算法,很显然,直接写代码吧……
【代码】
#include<iostream> using namespace std; int cnt,m,n;//cnt为计数器 void dfs(int a,int b) { if(a<=b||a>m||b>n) return ;//如果b>=a或a>m或b>n,就不符合题意了,那么结束 else if(a==m&&b==n) cnt++;//如果都遍历完一边以后没有问题就种数++ else{dfs(a,b+1);dfs(a+1,b);}//分别向两个方向分而治之,继续看b+1与a+1 } int main() { cin>>m>>n; dfs(1,0);//这是非常重要的一点,如果是(0,0)那么直接退出,就怎么都输出0了 cout<<cnt; }
你——悟到了么?