模板来自B站红桃A士
T1.分糖果
#include <stdio.h>
#include <stdlib.h>
int sum;
void fenTang(int smallFriend,int sweatA,int sweatB);
int main(int argc, char *argv[])
{
// 请在此输入您的代码
fenTang(7,9,16);
printf("%d",sum);
return 0;
}
void fenTang(int smallFriend,int sweatA,int sweatB)
{
if(smallFriend==1)
{//如果是叶子节点
if((sweatA+sweatB)<=5 && 2<=(sweatA+sweatB))//如果剩下的糖果符合要求
//那么就总数+1
sum++;
}
else
{//如果不是叶子节点
//尝试对当前的小朋友进行不同方案的分糖
int giveAmount,giveA,giveB;
for(giveAmount=2;giveAmount<=5;giveAmount++)//先确定给糖总量
for(giveA=0;giveA<=giveAmount;giveA++)//再确定每种糖的数量
if(sweatA>=giveA && sweatB>=(giveAmount-giveA))
{//如果分糖方案可行,则进入下一节点
giveB=giveAmount-giveA;
// printf("当前小朋友:%d,分得糖果:%d,%d。剩下的糖果:%d,%d\n",smallFriend,giveA,giveB,sweatA-giveA,sweatB-giveB);
fenTang(smallFriend-1,sweatA-giveA,sweatB-giveB);
}
}
}
fenTang部分代码就是dfs的体现,按照模板理解,但更多的仍是根据实际来解决
T2.