当前位置: 首页 > news >正文

蓝桥杯真题——约翰的牛奶

输入样例:

8 9 10

输出样例:

1 2 8 9 10

本题是宽搜的模版题,不论怎么倒牛奶,A,B,C 桶里的牛奶可以看做一个三元点集

我们只要找到A桶是空的,B,C桶中的状态即可

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;const int N= 21,M = N*N*N;
int A,B,C;
// 定义结构体,记录队列中三个桶牛奶情况 
struct Node
{int a,b,c;
}node[M];
// 每个桶中有多少牛奶的情况 
bool vis[N][N][N];void bfs()
{int hh=0,tt=0;// 最开始的状态,C桶是满的 node[0] = {0,0,C};// W 记录三个桶的容量 int W[3] = {A,B,C};// 标记初始情况,C桶中是满的 vis[0][0][C] = true;while(hh<=tt){auto t = node[hh++];// 有三个桶可以选择,并且可以向另外的桶倒牛奶 for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(i!=j){// w 记录现在三个桶中的牛奶有多少 int w[3] = {t.a,t.b,t.c};// 我们能倒出的牛奶是能倒出桶的容量// 与要倒入桶的容量取较小值 int cur = min(w[i],W[j]-w[j]);w[i]-=cur,w[j]+=cur;int a = w[0],b=w[1],c=w[2];// 标记状态 if(!vis[a][b][c]){vis[a][b][c] =true;node[++tt] = {a,b,c};}}}}}return;
}int main(void)
{scanf("%d%d%d", &A,&B,&C);bfs();// 当A桶空的时候,有那些状态是合法的 for(int c=0;c<=C;c++){for(int b=0;b<=B;b++){if(vis[0][b][c]){printf("%d ",c);break;}}}return 0;
}

感谢查看!

http://www.lryc.cn/news/437365.html

相关文章:

  • 单机docker-compose部署minio
  • Winform实现弹出定时框功能
  • 【机器学习(四)】分类和回归任务-梯度提升决策树(GBDT)-Sentosa_DSML社区版
  • Mini-Omni 语言模型在流式传输中边思考边听说应用
  • vue devtools的使用
  • 无人机培训:无人机维护保养技术详解
  • Mac 创建 Python 虚拟环境
  • 安卓玩机工具-----无需root权限 卸载 禁用 删除当前机型app应用 ADB玩机工具
  • 中国科技统计年鉴1991-2020年
  • OpenAI / GPT-4o:Python 返回结构化 / JSON 输出
  • 通信工程学习:什么是EDFA掺铒光纤放大器
  • 机器学习与深度学习的区别
  • 标准库标头 <barrier>(C++20)学习
  • 如何测量一个(传输网络)系统的容量
  • 【MySQL】MySQL和Workbench版本兼容问题
  • 项目实战 ---- 商用落地视频搜索系统(10)---后台搜索Cache优化
  • 客户端(服务器下载文件)
  • P1544 三倍经验 (记忆化搜索)
  • 【在Python中创建简单界面计算器】
  • 【四范式】浅谈NLP发展的四个范式
  • --- 数据结构 优先级队列 --- java
  • 鸿萌数据恢复服务:如何恢复 Mac 系统中被擦除的文件?
  • 片段阅读2_中心理解以外题型
  • 【网络安全 | 渗透工具】IIS 短文件名枚举工具—shortscan安装使用教程
  • 数据结构——栈和队列(队列的定义、顺序队列以及链式队列的基本操作)
  • el-table 的单元格 + 图表 + 排序
  • FPGA第 9 篇,Verilog 中的关键字和基数
  • 什么是单元测试?怎么做?
  • 论文复现--基于LeNet网络结构的数字识别
  • Vue3 响应式工具函数isRef()、unref()、isReactive()、isReadonly()、isProxy()