标签:

无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的。有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试管装满或原试管空了。当然每一次灌注都是完全的。由于无脑博士天天这么折腾,早已熟练,溶液在倒的过程中不会有丢失。

写一个程序去帮助无脑博士找出当A是个是空的时候,C试管中硫酸铜溶液所剩量的所有可能性。

输入包括一行,为空格分隔开的三个数,分别为整数A,B和C。

输出包括一行,升序地列出当A试管是空的时候,C试管溶液所剩量的所有可能性。

样例1

输入:

2 5 10

输出:

5 6 7 8 9 10#include

#include

#define MAX 21

int state[MAX][MAX],A,B,C;//状态数组state[i][j]代表A试管中有 i 升 溶液 B试管中有 j 升溶液的状态是否存在

void dfs(int a,int b,int c){

?????state[a][b]=1;

?????if(a

??????????if(c>=A-a&&state[A][b]==0)dfs(A,b,c-A+a);//可倒满

??????????if(c

??????????if(b>=A-a&&state[A][b-A+a]==0)dfs(A,b-A+a,c);

??????????if(b

??????}

??????if(b

??????????if(c>=B-b&&state[a][B]==0)dfs(a,B,c-B+b);

??????????if(c

??????????if(a>=B-b&&state[a-B+b][B]==0)dfs(a-B+b,B,c);

??????????if(a

??????}

??????if(c

??????????if(a>=C-c&&state[a-C+c][b]==0)dfs(a-C+c,b,C);

??????????if(a

??????????if(b>=C-c&&state[a][b-C+c]==0)dfs(a,b-C+c,C);

??????????if(b

??????}

}

int main(){

???int i;

???scanf("%d%d%d",&A,&B,&C);

???memset(state,0,sizeof(state));

???dfs(0,0,C);

???int frist=1;//用于保证输出格式,首次输出不在数字前加空格

???for(i=B;i>=0;i--){

??????if(state[0][i]){//若存在A试管为0,B试管为 i的状态,则输出

?????????if(frist)frist=0;

?????????else printf("");

??????????????printf("%d",C-i);

?????????????}

??????}

????return 0;

}

?

又是一道dp题目(和倒水问题很像)这次就是用到所谓记忆化搜索的方式进行动态规划,同时对解答图进行了dfs,练习dfs就是我做这题的本意。

因为总的溶液量为C 故 可用(i,j)来表示状态,i 为试管 A 当前容量 ,j 为 试管B 当前容量, 显然,C 试管容量为 C – i - j,从(i,j)状态可能发生的变化,即倒水的方式只有

c -> a ,b - > a, c - > b, a -> b, a -> c , b - >c 这6种方式。

而从 一个试管倒水到另一个试管有两种可能性,倒水试管和变为 0 和接水 试管被倒满 (我们可把倒水试管变为0且接水试管接满归到两种情况之一),

于是我们可通过两试管当前容量与最大容量的关系来判断某种倒水方式能否进行

同时,对于可能出现的重复状态,我们用数组state来进行记忆,标志某种状态是否出现过,来减少重复计算,同时可用state数组来得出最终解。又发现状态即为解的情况。。

最后又是吐槽时间,计蒜客的题目的分类让我总是能快速找到解题的方向,这道题想出思路花了我没多久时间,因为是递归的实现起来也不能,就是在if判断哪里码了好久,尼玛

一点错误都不能有,我只能小心翼翼地写,幸亏一次正确,但是这题我还是WA了,因为输出格式错误,我做过这么多题(并没有)还是第一次看到这种错误提示,从白书里看到

的技巧第一次有了用武之地,然后就AC了,这题还是蛮水的,但也挺典型的。还有下载的word代码高亮插件不给力啊。。为什么没有C/C++的啊!幸亏其他语言也有

int If //注释什么的,有了这些基本代码还能看,还有我真的无法对vim喜欢起来,特别是计蒜客那个在线阉割版的,我就是个只能靠IDE的普通人没办法。。

标签:

无脑博士的试管们java_计蒜客 无脑博士和他的试管们相关推荐

  1. 5.计蒜客ACM题库.A2234 结果填空:青蛙爬井

    计蒜客ACM题库.A2234 结果填空:青蛙爬井 有一口深度为 high 米的水井,井底有一只青蛙,它每天白天能够沿井壁向上爬 up 米,夜里则顺井壁向下滑 down 米. 若青蛙从某个早晨开始向外爬 ...

  2. 计蒜客 T1895切蛋糕(单调队列)

    题目:传送阵 思路: 分析题目,简单的说这个题目求的就是最大不定长子段和,那么首先对于最大不定长子段和,我们肯定要首先预处理前缀和数组,然后首先朴素的想, 对于以第i个元素结尾的子段,最大的子段和re ...

  3. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  4. 最短路(遍历边)计蒜客—DD坐地铁

    题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi​表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...

  5. K - Triangle 计蒜客 - 42405

    K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...

  6. H - Prince and Princess 计蒜客 - 42402

    H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...

  7. C - Digital Path 计蒜客 - 42397 05-29

    C - Digital Path 计蒜客 - 42397 题意: 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走,而且下一个位置必须比当前位置的数字大1,入口和出口必须数边缘元素, ...

  8. 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...

    在人才招聘领域存在这样一个怪圈,高校每年都说是最难就业年.人才过剩,而对于企业HR来说永远都招不到称心如意的人才.这个怪圈在"计蒜客"创始人俞昊然看来,主要是因为当今高校的教学资源 ...

  9. 计蒜客 - T1012 A*B问题

    计蒜客 - T1012 A*B问题 相信你已经学会 A+B 问题了,那么问题又来了- 输入两个正整数 A 和 B ,求 A×B. 输入格式 一行,包含两个正整数 A 和 B,中间用单个空格隔开. 1≤ ...

最新文章

  1. 神经网络基础知识梳理
  2. 使用Minify合并css和js减少http请求
  3. Python机器学习及分析工具:Scipy篇
  4. 2022年改变数据中心行业的八大趋势
  5. 生成对抗网络(GAN)的数学原理全解
  6. Python基础教程:__setattr__和__delattr__和__getattr__的用法
  7. 华为鸿蒙电脑操作系统测试版,华为鸿蒙测试版下载 华为鸿蒙测试版电脑版下载...
  8. string 转 json_手写Json解析器学习心得
  9. [转帖]规模化敏捷-简要对比SAFe、LeSS和DAD模式
  10. 《京东大鼓——老年迪斯科》(董湘昆)(唱词文本)
  11. 关于中断是否可以套嵌?
  12. 抗癌中草药彩色图谱——西洋参
  13. 用3Ds Max做三维场景建模
  14. -XX:GCTimeRatio
  15. 前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端工程师的?...
  16. Scanner扫描仪的使用方法
  17. tp3.2.3 图片打水印
  18. (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计
  19. idea常用的一些配置信息
  20. R语言与数据分析练习:使用ARIMA模型预测网站访问量

热门文章

  1. 【LeetCode从零单排】No221.Maximal Square
  2. 四张图带你了解Tomcat系统架构--让面试官颤抖的Tomcat回答系列!【转】
  3. 鏖战双十一-阿里直播平台面临的技术挑战
  4. C语言中嵌入正则表达式
  5. 针对这一行业痛点,创新工场投资的潞晨科技发布了大规模并行AI训练系统——“夸父”(Colossal-AI) ,通过多维并行、大规模优化器、自适应任务调度、消除冗余内存、降低能量损耗等方式,旨在打造一个
  6. 区块链3.0:侧链与跨链行业趋势报告|OK资本
  7. Android个人信息管理系统 源代码,个人信息管理系统源代码(自己写的).doc
  8. linux添加硬盘分区设置柱面,linux 下添加新硬盘设备和硬盘分区格式化挂载使用磁盘配额限制...
  9. MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)
  10. Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表