这种题如何编程解决?

2014 年 8 月 16 日
 lcj2class
题目要求是这样的:
假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。如何只用这2个水壶从池塘里取得3升的水**(最后,这三升水,在其中一个壶里)


我这里尝试进行了总结,
http://liujiacai.net/blog/2014/08/16/two-pot-question/

大家谁还有这种题目,可以分享出来,我觉得这种题很能锻炼思维,谢谢。
5572 次点击
所在节点    程序员
34 条回复
pljhonglu
2014 年 8 月 16 日
见到校友~赞一个~
yangff
2014 年 8 月 16 日
@lcj2class 你这样考虑,最开始的时候两个桶都是空的显然是可以的为1,
每个时刻有4种操作可以做,把某个桶装满,把一个桶的水倒进另一个桶。
直接搜索的话当然可以,但是你会发现,如果你已经知道ij这个状态的结果,就不用再去计算了,用数组记一下某个状态是否到达过就可以了,最后可以发现这个转移的过程其实就是在mod x意义下做扩展欧几里德。
lcj2class
2014 年 8 月 16 日
@yangff 我大概知道你的意思了,那这个数组应该怎么构造呢?
asmore
2014 年 8 月 16 日
算法表述非常清晰~~
bengol
2014 年 8 月 16 日
@jok3r hackerrank 出过
yhf
2014 年 8 月 16 日
acm里一般都会有这种题吧,描述题。
yangff
2014 年 8 月 16 日
@lcj2class 搜索的时候记录一下当前的ij是否被算过,如果算过了就直接return这样最后得到的就是这个数组了。。
yangff
2014 年 8 月 16 日
http://codeforces.com/problemset/problem/343/A
这题和你这题做法差不多。。
heganj
2014 年 8 月 17 日
core.logic
bombless
2014 年 8 月 17 日
也许可以参考一下张景中的书…他研究的一个方向就是用程序证明几何命题。
monkeylyf
2014 年 8 月 17 日
gcd
lcj2class
2014 年 8 月 17 日
@yangff 你这不就是动态规划嘛,不过lisp中一般都是直接用递归或迭代解决问题的,怎么保存中间状态我还不清楚
yangff
2014 年 8 月 17 日
@lcj2class 囧我写的就是dp啊
tushiner
2014 年 8 月 17 日
弱弱的说,ACM里面不是有很多这种东东么。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/128273

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX