计蒜客 无脑博士的试管们 【dfs】
题目链接:https://nanti.jisuanke.com/t/31
题目大意:
无脑博士有三个容量分别是A,B,C 升的试管,A,B,C 分别是三个从 1 到20 的整数,最初,A 和 B 试管都是空的,而 C 试管是装满硫酸铜溶液的。有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试管装满或原试管空了。当然每一次灌注都是完全的。由于无脑博士天天这么折腾,早已熟练,溶液在倒的过程中不会有丢失。
写一个程序去帮助无脑博士找出当 A 试管是空的时候,C 试管中硫酸铜溶液所剩量的所有可能性。
输入格式
输入包括一行,为空格分隔开的三个数,分别为整数 A,B,C。
输出格式
输出包括一行,升序地列出当 A 试管是空的时候,C 试管溶液所剩量的所有可能性。
样例输入
2 5 10
样例输出
5 6 7 8 9 10
#include <iostream>
using namespace std; int f[][][];
int A, B, C; void dfs(int x, int y, int z)
{
if (x + z > A) //C向A倒
{
if (f[A][y][x + z - A] == )
{
f[A][y][x + z - A] = ;
dfs(A, y, x + z - A);
}
}
else
{
if (f[x + z][y][] == )
{
f[x + z][y][] = ;
dfs(x + z, y, );
}
}
if (y + z>B) //C向B倒
{
if (f[x][B][y + z - B] == )
{
f[x][B][y + z - B] = ;
dfs(x, B, y + z - B);
}
}
else
{
if (f[x][y + z][] == )
{
f[x][y + z][] = ;
dfs(x, y + z, );
}
}
if (x + y >B) //A向B倒
{
if (f[x + y - B][B][z] == )
{
f[x + y - B][B][z] = ;
dfs(x + y - B, B, z);
}
}
else
{
if (f[][x + y][z] == )
{
f[][x + y][z] = ;
dfs(, x + y, z);
}
}
if (x + z > C) //A向C倒
{
if (f[x + z - C][y][C] == )
{
f[x + z - C][y][C] = ;
dfs(x + z - C, y, C);
}
}
else
{
if (f[][y][x + z] == )
{
f[][y][x + z] = ;
dfs(, y, x + z);
}
}
if (x + y > A) //B向A倒
{
if (f[A][x + y - A][z] == )
{
f[A][x + y - A][z] = ;
dfs(A, x + y - A, z);
}
}
else
{
if (f[x + y][][z] == )
{
f[x + y][][z] = ;
dfs(x + y, , z);
}
}
if (y + z > C) //B向C倒
{
if (f[x][y + z - C][C] == )
{
f[x][y + z - C][C] = ;
dfs(x, y + z - C, C);
}
}
else
{
if (f[x][][y + z] == )
{
f[x][][y + z] = ;
dfs(x, , y + z);
}
} } int main()
{
int i, j, k;
void dfs(int x, int y, int z);
cin >> A >> B >> C;
for (i = ; i < A + ; i++)
for (j = ; j < B + ; j++)
for (k = ; k < C + ; k++)
f[i][j][k] = ;
f[][][C] = ;
dfs(, , C);
for (k = ; k < C + ; k++)
for (j = ; j < B + ; j++)
if (f[][j][k] > )
{
cout << k;
if (k != C) cout << ' ';
}
return ;
}
2018-05-14
计蒜客 无脑博士的试管们 【dfs】的更多相关文章
- 计蒜客 无脑博士 bfs
题目链接无脑博士的试管们 思路:直接模拟倒水过程即可,但是需要记忆判断当前的情况是否已经处理过.dfs和bfs都ok AC代码 #include <cstdio> #include < ...
- 无脑博士的试管们--dfs搜素
无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试 ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
- 计蒜客 买书 dfs
题目: https://www.jisuanke.com/course/2291/182236 思路: 递归解决,从第一本书开始,每本书都有两种选择: //index是book里面每本书价格的下标, ...
- 计蒜客:Entertainment Box
Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...
随机推荐
- layoutSubviews总结(转)
- (void)setNeedsDisplay - (void)drawRect 但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发 You shou ...
- linux 网卡
查看网卡UUID:nmcli con show 或 nmcli con list 查看网卡mac地址:nmcli dev show 或 nmcli dev list 注:sho ...
- oracle 行号和分页
1.行号是个伪列,rownum 永远按照默认的顺序生成 2.rownum 只能使用< <= 不能使用> >=(原因是oracle数据库是行式数据库,像盖楼一样,没有第一层就排 ...
- MR运动静止用户区分
1.客户端打开菜单[MR]-[MR室内室外判定设置] 设置主小区是室外站且主小区信号比较强时RSRP门限 2.设置"上报数据用户临小区切换次数门限设置"值为15 mysql中t_m ...
- 一个有趣的小例子,带你入门协程模块-asyncio
一个有趣的小例子,带你入门协程模块-asyncio 上篇文章写了关于yield from的用法,简单的了解异步模式,[https://www.cnblogs.com/c-x-a/p/10106031. ...
- 常用css样式(布局)
兼容css3新属性 在css3中,我们可以使用prefixfree.min.js这个插件来自动为css3的相关属性加上兼容浏览器属性,使我们不用为每个css3新属性再加上属性(需要用到大量css3的项 ...
- PNG,JPEG,BMP,JIF图片格式详解及其对比
原文地址:http://blog.csdn.net/u012611878/article/details/52215985 图片格式详解 不知道大家有没有注意过网页里,手机里,平板里的图片,事实上,图 ...
- Expm 7_1树中的最大独立集问题
[问题描述] 给定一个无回路的无向图(即树),设计一个动态规划算法,求出该图的最大独立集,并输出该集合中的各个顶点值. package org.xiu68.exp.exp7; import java. ...
- 在listView中的模糊查询和删除
- 最全的基于MFC的ActiveX控件开发教程
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...