“李白街上走,提壺去買酒,遇店加一倍,見花喝一斗”,途中,遇見5次店,見了10此花,壺中原有2斗酒,最后剛好喝完酒,要求最后遇見的是花,求可能的情況有多少種?
分析:題目要求最后是遇見花也就是說最后是喝酒(最好剛好把酒完),出去這種確定的情況,最后剩下的情況是:還有一斗酒,前面遇到了5次店和九次花(打了5次酒,喝了九次酒)。
然后每次情況只有兩種分別是遇見花喝酒和遇到店打酒。
//dfs(num-1,mum,s*2)+dfs(num,mum-1,s-1);
遇到店的時候打酒(s*2),然后酒的斗數會翻倍;遇到花時喝酒,然后酒的斗數減一(s-1);
然后設置遞歸的出口:
當酒喝完還遇見花時,則return 0;以為酒不能是負的;
當5個店已經都遇見過時,則return 0;
當9個花已經都遇見過時,則return 0;
當花剛好遇見完,店剛好遇見完,酒還有一斗時:return 1;
當中間過程,酒喝完了,但是遇見店了,又因為此時s=0,遇到店的時候打酒(s*2),所以要把s設置成0.5;
#include
int dfs(int num,int mum,int s){
if(s<0 || num<0 || mum<0)
return 0;
if(num<0 || mum<0)
return 0;
if(num==0 && mum==0&& s==1)
return 1;
if(s==0 && num>0 && mum>=0)
s=0.5;
return dfs(num-1,mum,s*2)+dfs(num,mum-1,s-1);
}
int main()
{
printf("%d",dfs(5,9,2));
return 0;
}