题解:P13886 [蓝桥杯 2023 省 Python A] 分糖果

· · 题解

P13886 [蓝桥杯 2023 省 Python A] 分糖果

题意

两种糖果分别有 9 个和 16 个,要全部分给 7 个小朋友,每个小朋友得到的糖果总数最少为 2 个最多为 5 个,问有多少种不同的分法?

思路

我们可以进行深度优先搜索,第一层为 dfs(9,16,0)3 个变量意思分别为第一堆糖果剩余数量,第二堆糖果剩余数量与已经分了多少人。

每次深度优先搜索优先考虑:

然后继续往下搜索,分别考虑扣不同糖果的方式,继续向下搜索,搜索代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,ans=0;
void dfs(int x,int y,int step)
{
    if(x<0||y<0) return ;
    if(step==7)
    {
        if(x==0&&y==0) ans++;
        return ;
    }
    for(int i=0;i<=x;i++)
        for(int j=0;j<=y;j++)
            if(i+j>=2&&i+j<=5)
                dfs(x-i,y-j,step+1); 
}
signed main()
{
    dfs(9,16,0);
    cout<<ans;
    return 0;
}

我们算出答案为 5067671,这是一道结果填空题,只需要算出结果后提交即可,在提交答案时只输出这个答案,填写多余的内容将无法得分,所以我们直接输出 5067671

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
    cout<<5067671;
    return 0;
}