专栏文章

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

P13886题解参与者 2已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@mio30xe5
此快照首次捕获于
2025/12/02 12:32
3 个月前
此快照最后确认于
2025/12/02 12:32
3 个月前
查看原文

题意

两种糖果分别有 99 个和 1616 个,要全部分给 77 个小朋友,每个小朋友得到的糖果总数最少为 22 个最多为 55 个,问有多少种不同的分法?

思路

我们可以进行深度优先搜索,第一层为 dfs(9,16,0)dfs(9,16,0)33 个变量意思分别为第一堆糖果剩余数量,第二堆糖果剩余数量与已经分了多少人。
每次深度优先搜索优先考虑:
  • 如果两堆中有一堆的糖果变为了负数,那么就不必继续往下搜索了。
  • 如果 77 个人都分完了,且两堆糖果都为 00,那么就多一种方案。
然后继续往下搜索,分别考虑扣不同糖果的方式,继续向下搜索,搜索代码如下:
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;
}
我们算出答案为 50676715067671,这是一道结果填空题,只需要算出结果后提交即可,在提交答案时只输出这个答案,填写多余的内容将无法得分,所以我们直接输出 50676715067671
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
	cout<<5067671;
	return 0;
}

评论

2 条评论,欢迎与作者交流。

正在加载评论...