母亲的奶牛(bfs)

news2024/11/30 6:53:24

农夫约翰有三个容量分别为 A , B , C A,B,C A,B,C 升的挤奶桶。

最开始桶 A A A 和桶 B B B 都是空的,而桶 C C C 里装满了牛奶。

有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。

这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。

请你编写一个程序判断,当 A A A 桶是空的时候, C C C 桶中可能包含多少升牛奶,找出所有的可能情况。

输入格式

共一行,包含三个整数 A , B , C A,B,C A,B,C

输出格式

共一行,包含若干个整数,表示 C C C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。

数据范围

1 ≤ A , B , C ≤ 20 1≤A,B,C≤20 1A,B,C20

输入样例1:

8 9 10

输出样例1:

1 2 8 9 10

输入样例2:

2 5 10

输出样例2:

5 6 7 8 9 10

思路

以输入样例1模拟

在这里插入图片描述

可以发现,每个桶都可以倒入另外两个桶中

在这里插入图片描述

也就是说,在桶的数量为 3 3 3 的情况下,共有 3 × 2 = 6 3 \times 2 = 6 3×2=6 种可能。

因此可以枚举 6 种状态或者循环遍历所有所有状态。

这里我们可以用数组模拟队列,每当有新的状态时,就把新状态入队,通过遍历队列进行宽搜

代码

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 21;
int A, B, C; //桶的容量
struct node {
	int a, b, c;
} q[N * N * N];
bool st[N][N][N];//标记状态

int bfs() {
	int hh = 0, tt = 0; //队头队尾
	q[0] = {0, 0, C};
	st[0][0][C] = true;
	int W[3] = {A, B, C}; //桶的容量

	while (hh <= tt) {
		auto t = q[hh++];
		for (int i = 0; i < 3; i++) //将i桶倒入j桶
			for (int j = 0; j < 3; j++)
				if (i != j) {
					int w[3] = {t.a, t.b, t.c};
					int r = min(w[i], W[j] - w[j]);
					w[i] -= r, w[j] += r;

					int a = w[0], b = w[1], c = w[2];
					if (!st[a][b][c]) {
						st[a][b][c] = true; //标记
						q[++tt] = {a, b, c}; 
					}
				}
	}

}

int main() {
	cin >> A >> B >> C;
	bfs();

	for (int i = 0; i <= C; i++)
		for (int j = 0; j <= B; j++)
			if (st[0][j][i]) {
				cout << i << ' ';
				break;
			}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1529583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算新宠:探索Apache Doris的云原生策略

文章目录 Apache Doris 特性极简架构高效自运维高并发场景支持MPP 执行引擎明细与聚合模型的统一便捷数据接入 Apache Doris 极速 1.0 时代极速列式内存布局向量化的计算框架Cache 亲和度虚函数调用SIMD 指令集 稳定多源 关于 Apache Doris 开源社区基于云原生向量数据库Milvus…

十四届蓝桥杯 冶炼金属(二分 / 公式)

二分代码1&#xff1a; #include<iostream> #include<cstdio> #include<cmath> using namespace std;int get(int a, int b){int l1;r1e91;while(l<r){int mid lr >>1;if(a / mid < b){r mid;}else l mid 1;}return l; } int main() {int n…

13|连接数据库:通过链和代理查询鲜花信息

新的数据库查询范式 提出问题&#xff1a;用户用自然语言提出一个问题&#xff0c;例如“去年的总销售额是多少&#xff1f;”。LLM 理解并转译&#xff1a;LLM 首先会解析这个问题&#xff0c;理解其背后的意图和所需的信息。接着&#xff0c;模型会根据解析的内容&#xff0c…

3.18号arm

4 跳转指令 实现汇编程序跳转的两种方式 直接修改PC的值 mov pc , #0x04 通过跳转指令跳转 b 标签 程序跳转到指定的标签下执行&#xff0c;此时LR寄存器不保存返回地址 bl 标签 程序跳转到指定的标签下执行&#xff0c;此时LR寄存器保存返回地址 5 内存读写指令&#xff0…

docker安装华为opengauss高斯数据库

opengauss高斯数据库 openGauss是一款企业级开源关系型数据库&#xff0c;由华为公司推出。它深度融合了华为多年的数据库领域经验&#xff0c;充分结合企业级场景需求&#xff0c;基于openGauss自研生态而打造。 在架构上&#xff0c;openGauss着重于传统数据库的企业级能力和…

【Python爬虫】详解BeautifulSoup()及其方法

文章目录 &#x1f354;准备工作&#x1f339;BeautifulSoup()⭐代码实现✨打印标签里面的内容✨快速拿到一个标签里的属性✨打印整个文档&#x1f386;获取特定标签的特定内容 &#x1f339;查找标签&#x1f388;在文档查找标签 find_all&#x1f388;正则表达式搜索 &#x…

如何做好一个“标题党”?媒介盒子揭秘

广告界常说“酒香也怕巷子深”&#xff0c;好标题能够增强文案的点击率&#xff0c;标题党的目的就在于合理利用标题让自己的文案更有点击率。今天媒介盒子就来和大家聊聊&#xff1a;如何做好一个“标题党”。 一、 利用好奇心 好奇心是普遍存在的&#xff0c;比如当看小说的…

题目:反转列表

目录 一、题目描述 方法一&#xff1a;扭动箭头 思路&#xff1a; 注意点&#xff1a; 代码&#xff1a; 代码解析&#xff1a; 1. 2. 优化代码&#xff1a; 注意&#xff1a; 1. 2. 方法二&#xff1a;头插 1.介绍头插 2.解决思路 3.代码 4.注意点 总结&#…

AV1:帧内预测(一)

​VP9支持10种帧内预测模式&#xff0c;包括8种角度模式和非角度模式DC、TM(True Motion)模式&#xff0c;AV1在其基础上进一步扩展&#xff0c;AV1帧内预测角度模式更细化&#xff0c;同时新增了部分非角度模式。 扩展的角度模式 AV1在VP9角度模式的基础上进一步扩展&#xf…

漫谈微服务网关

一、什么是服务网关 服务网关 路由转发 过滤器 1、路由转发&#xff1a;接收一切外界请求&#xff0c;转发到后端的微服务上去&#xff1b; 2、过滤器&#xff1a;在服务网关中可以完成一系列的横切功能&#xff0c;例如权限校验、限流以及监控等&#xff0c;这些都可以通过…

AI智能客服的数据训练流程

实现智能客服的数据训练流程可以分为几个主要步骤&#xff0c;包括数据准备、模型选择、模型训练和评估。以下是一个基本的数据训练流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.数据准备&am…

软件开发项目管理/研发项目管理软件:国产EDA工具厂商行芯科技上线奥博思PowerProject项目管理软件平台

国内领先的EDA工具链提供商杭州行芯科技有限公司&#xff08;以下简称&#xff1a;行芯科技&#xff09;与北京奥博思软件技术有限公司达成战略合作&#xff0c;奥博思软件将基于PowerProject项目管理系统助力行芯科技实现研发项目的全生命周期管理&#xff0c;提升管理效能&am…

fastjson反序列化攻略

漏洞原理 Json.parseObject(json, User.class)方法中&#xff0c;通过指定type的值实现定位某类&#xff0c;会执行User类的构造方法和属性中的get&#xff0c;set方法 判断是否是fastjson/&#xff08;jackson&#xff09; 1.2.24-1.2.83都会有dnslog的payload {"zer…

基于Springboot的船运物流管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的船运物流管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

(总结)OpenOFDM接收端信号处理流程

Overview — OpenOFDM 1.0 documentation 本篇文章为学习OpenOFDM之后的产出PPT&#xff0c;仅供学习参考。

28-4 文件上传漏洞 - %00和00截断

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、白名单绕过、%00和O0截断 %00和O0截断定义: 在URL中,%00表示ASCII码中的0(零),而ASCII中0作为特殊字符保留,所以当URL中出现%00时就会认为读取已结束。这等同于一个结束…

springboot校服订购系统

摘 要 本文首先实现了校服订购系统设计与实现管理技术的发展随后依照传统的软件开发流程&#xff0c;最先为系统挑选适用的言语和软件开发平台&#xff0c;依据需求分析开展控制模块制做和数据库查询构造设计&#xff0c;随后依据系统整体功能模块的设计&#xff0c;制作系统的…

【c语言篇】每日一题-pta-实验11-2-9 链表逆置

题目如下&#xff1a; 裁判测试程序样例&#xff1a; #include <stdio.h> #include <stdlib.h>struct ListNode {int data;struct ListNode *next; };struct ListNode *createlist(); /*裁判实现&#xff0c;细节不表*/ struct ListNode *reverse( struct ListNod…

SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…