问题描述
两种糖果分别有9个和16个,要全部分给7个小朋友,每个小朋友
得到的糖果总数最少为2个最多为5个,问有多少种不同的分法。糖
果必须全部分完。
只要有其中一个小朋友在两种方案中分到的糖果不完全相同,这两种
方案就算作不同的方案。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果
为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法
得分。
解题思路
首先我想到了dfs,边界为糖果分完,但每个小朋友可以分两种糖果a和b,
数量之和为2-5个,这里其实用两个for依次枚举即可。
完整代码
#include <iostream>
using namespace std;
int ans=0,a=9,b=16;
void dfs(int x,int m,int n){//x为小朋友编号,m,n为两种糖果剩余数量
if(x>7){
if(m==0&&n==0){
ans++;
}
return ;
}
for(int i=0;i<=m;i++){
for(int j=0;j<=n;j++){
if(i+j>=2&&i+j<=5){
dfs(x+1,m-i,n-j);
//这里不用恢复现场,因为并未改变当前深度糖果数量
}
}
}
}
int main()
{
dfs(1,9,16);
cout<<ans;
return 0;
}