专栏文章
题解:P13886 [蓝桥杯 2023 省 Python A] 分糖果
P13886题解参与者 2已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mio30xe5
- 此快照首次捕获于
- 2025/12/02 12:32 3 个月前
- 此快照最后确认于
- 2025/12/02 12:32 3 个月前
题意
两种糖果分别有 个和 个,要全部分给 个小朋友,每个小朋友得到的糖果总数最少为 个最多为 个,问有多少种不同的分法?
思路
我们可以进行深度优先搜索,第一层为 , 个变量意思分别为第一堆糖果剩余数量,第二堆糖果剩余数量与已经分了多少人。
每次深度优先搜索优先考虑:
- 如果两堆中有一堆的糖果变为了负数,那么就不必继续往下搜索了。
- 如果 个人都分完了,且两堆糖果都为 ,那么就多一种方案。
然后继续往下搜索,分别考虑扣不同糖果的方式,继续向下搜索,搜索代码如下:
CPP#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;
}
我们算出答案为 ,这是一道结果填空题,只需要算出结果后提交即可,在提交答案时只输出这个答案,填写多余的内容将无法得分,所以我们直接输出 。
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
cout<<5067671;
return 0;
}
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...