ZCMU - 1978: 调酒壶里的酸奶
发布日期:2021-06-30 23:40:40
浏览次数:2
分类:技术文章
本文共 1272 字,大约阅读时间需要 4 分钟。
题目链接:
题目大意:略。
解题思路:记忆化搜索,对每个状态都有六种情况:
- 把A倒满
- 把B倒满
- 把A倒光
- 把B倒光
- 把A倒进B
- 把B倒进A
六个情况直接搜索就可以了...当然dfs是会超时的,需要用记忆化搜索。
AC 代码
#include#include #define mem(a,b) memset(a,b,sizeof a);#define INF 0x3f3f3f3fusing namespace std;typedef long long ll;typedef pair pii;queue q;int a,b,c;int vis[110][110], dis[110][110];void init(){ while(!q.empty()) q.pop(); mem(vis,0); mem(dis,0);}int bfs(){ dis[0][0]=0; vis[0][0]=1; q.push(make_pair(0,0)); int x,y,A,B; while(!q.empty()) { x=q.front().first, y=q.front().second; q.pop(); for(int i=1;i<=6;i++) { if(i==1) A=a, B=y; else if(i==2) A=x, B=b; else if(i==3) A=0, B=y; else if(i==4) A=x, B=0; else if(i==5) A=x+y>=b?x+y-b:0, B=x+y>=b?b:x+y; else if(i==6) B=x+y>=a?x+y-a:0, A=x+y>=a?a:x+y; if(!vis[A][B]) { vis[A][B]=1; dis[A][B]=1+dis[x][y]; if(A==c || B==c) return dis[A][B]; q.push(make_pair(A,B)); } } } return 0;}int main(){ while(~scanf("%d%d%d",&a,&b,&c)) { init(); int rs=bfs(); if(rs) printf("%d\n",rs); else puts("impossible"); } return 0;}
转载地址:https://lux-sun.blog.csdn.net/article/details/81082654 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月14日 10时29分10秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mysql——介绍及安装与基本用法
2019-04-30
MYSQL——事务操作+视图+存储引擎
2019-04-30
MySQL进阶查询(SELECT 语句高级用法)
2019-04-30
Mysql 之主从复制
2019-04-30
【学习笔记】对vanilla的一些个人理解
2019-04-30
“学硕” VS “专硕”
2019-04-30
【NLP学习笔记】知识图谱阅读笔记及其心得
2019-04-30
【工具使用】新版CSDN-markdown编辑器使用指南
2019-04-30
《知识图谱》阅读笔记(六)
2019-04-30
【NLP学习笔记】中文分词(Word Segmentation,WS)
2019-04-30
【超越白皮书7】你需要知道关于ETH2.0的几个事实
2019-04-30
对于时间复杂度的通俗理解
2019-04-30
如何输入多组数据并输出每组数据的和?
2019-04-30
行阶梯型矩阵
2019-04-30
matlab中uint8,double,im2double和im2uint8的区别
2019-04-30
C++学习笔记
2019-04-30
图像处理学习笔记
2019-04-30
Machine Learning Onramp on MATLAB 学习笔记
2019-04-30
Machine Learning with MATLAB 1.1 to 2.2
2019-04-30
Learning DSP with MATLAB
2019-04-30