原帖由 anselcat 于 2008-9-16 12:49 发表
有n个水桶,组成一个环,相邻两个有水管连接,
水管中间有阀门,都关上。
初始条件是:水桶有水,深度不一,保存在数组a[n]里面。
问:设计算法,针对具体的a[n],使得打开阀门最少情况下,水桶深度相同 ...
原帖由 cugb_cat 于 2008-9-16 13:34 发表
1计算平均值;
2从第一个开始扫描,以阀门为考察对象,阀门有两个状态,开或关,如果某个阀门两边的水的高度一个高于平均值,一个低于平均值,则需要把该阀门打开,其他情况皆不打开。
原帖由 anselcat 于 2008-9-16 12:49 发表
有n个水桶,组成一个环,相邻两个有水管连接,
水管中间有阀门,都关上。
初始条件是:水桶有水,深度不一,保存在数组a[n]里面。
问:设计算法,针对具体的a[n],使得打开阀门最少情况下,水桶深度相同 ...
原帖由 cugb_cat 于 2008-9-16 13:40 发表
这是最后要考虑的,当完成前2步后,还需要检查一遍,看哪些没有达到平均水平,然后找能把这些点都包含进去,并且距离最小的路径,然后把阀门打开就行了。。
这个解法我也不能确定是不是打开的阀门数最少, ...
原帖由 cugb_cat 于 2008-9-16 13:34 发表
1计算平均值;
2从第一个开始扫描,以阀门为考察对象,阀门有两个状态,开或关,如果某个阀门两边的水的高度一个高于平均值,一个低于平均值,则需要把该阀门打开,其他情况皆不打开。
原帖由 cugb_cat 于 2008-9-16 13:40 发表
这是最后要考虑的,当完成前2步后,还需要检查一遍,看哪些没有达到平均水平,然后找能把这些点都包含进去,并且距离最小的路径,然后把阀门打开就行了。。
这个解法我也不能确定是不是打开的阀门数最少, ...
原帖由 5毛党党员 于 2008-9-16 13:44 发表
因为是环所以没有第一个
我想的o(n^2)的做法
1,求出平均值
2,从任意一个桶开始,计算深度的总和,直到这个区域的深度总和 = 平均值 * 这个区域桶的个数
3,重复2,直到一次循环结束,结束后,记录区 ...
原帖由 benbenr 于 2008-9-16 14:01 发表
是这样的,我认为是个环。流的方向只有2种,计算相邻的差值,直到最后就是平衡的,往2个方向计算,在段路径中能满足的就好。可以找平均值为起点。如果在搜索中达到一次平均值(或者说是差值==0)就要-1,少开一 ...
原帖由 5毛党党员 于 2008-9-16 13:44 发表
因为是环所以没有第一个
我想的o(n^2)的做法
1,求出平均值
2,从任意一个桶开始,计算深度的总和,直到这个区域的深度总和 = 平均值 * 这个区域桶的个数
3,重复2,直到一次循环结束,结束后,记录区 ...
原帖由 xuezhg 于 2008-9-18 11:11 发表
o(n^2)的做法
1,求出平均值
2,从任意一个桶开始,计算深度的总和,直到这个区域的深度总和 = 平均值 * 这个区域桶的个数,直到遍历了所有桶,记做一次循环结束,记录区域的个数
4,以下一个桶 ...
原帖由 binaron 于 2008-9-23 23:47 发表
楼上的只是考虑了自平衡桶,没有考虑自平衡区,自平衡桶本身只是自平衡区的一个特例。
PS , 本题有误导之嫌,根本就没有O(n)算法,
在上面的论述中,我将题目分解成了两个部分,第一部分在o(n)范围内市 ...
原帖由 cugb_cat 于 2008-9-16 13:34 发表
1计算平均值;
2从第一个开始扫描,以阀门为考察对象,阀门有两个状态,开或关,如果某个阀门两边的水的高度一个高于平均值,一个低于平均值,则需要把该阀门打开,其他情况皆不打开。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |