由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Amazon电面,比楼层扔鸡蛋题更难的智力题
相关主题
扔鸡蛋那个题。。。。。不会。。。。问一个M的算法题
请教,求最近5分钟,10分钟,1小时内Top 3的搜索关键字, 这题有什么好的想法?Quick selection for k unsorted arrays
split a string into words in a dictionary这题有最坏情况比exponential 快的解法么?大侠帮我看看这段程序
这题有点意思 给一个数组, 找最大的整数m, 使得数组里比m大的或相等 的值的树木大于等于m(线性)弱弱的问问 2sum, 3sum 的问题
扔鸡蛋的问题问一个G家的二维积水题目
算法:按照字典序求第k个排列数完了被Gayle complain了
我也来道题吧摔鸡蛋问题是编程题么?
问道题(分球问题)求intersect的圆,求O(nlogn)的方法
相关话题的讨论汇总
话题: 鸡蛋话题: complain话题: 天数话题: 探测话题: dp
进入JobHunting版参与讨论
1 (共1页)
j**l
发帖数: 2911
1
一个俄国人问的题,估计要是fail的话就是栽在这道题目上了。
这题从Goolge的那个百层楼扔鸡蛋题变换而来,原来那道题,只需要从14, 27, 39, 50,
60, 69, 77, 84, 90, 95, 99依次扔第一个鸡蛋就可以了,然后再用第二个鸡蛋线性探测
变体题是这样的,从A地发货到B地,所需要时间是某个常数x, 1 <= x <= 100, 怎么找
出x?
方法是寄东西给顾客,顾客的数量不限制.对每个顾客都承诺一个到达天数t, 如果按
时或者提前收到了,顾客就默认了.如果迟到了,该顾客就一定会在t+1天投诉。
现在要求你用这个方法求出x的准确值, 使得等待天数最短(用最短时间得到x), 要求
最多只能收到两次投诉,收到第三次投诉是不行的。
我明确告诉他,这题和一道经典的扔鸡蛋题类似,大体思路就是用第一次投诉机会确定一个范围,然后再收到投诉后改用线性探测。
他说这题是和那题类似,但是要求不同,所以更难。主要是要求等待天数要尽可能短。所以一开始选50天,不是最好的解法。他还说,这题难,主要是看看你有什么思路想法,不要求一定要给出正确的答案来。
他还说,如果一开始太激进,从比
K******g
发帖数: 1870
2
麻烦你把google 那题也详细的写一下吧。多谢了

,
探测

【在 j**l 的大作中提到】
: 一个俄国人问的题,估计要是fail的话就是栽在这道题目上了。
: 这题从Goolge的那个百层楼扔鸡蛋题变换而来,原来那道题,只需要从14, 27, 39, 50,
: 60, 69, 77, 84, 90, 95, 99依次扔第一个鸡蛋就可以了,然后再用第二个鸡蛋线性探测
: 变体题是这样的,从A地发货到B地,所需要时间是某个常数x, 1 <= x <= 100, 怎么找
: 出x?
: 方法是寄东西给顾客,顾客的数量不限制.对每个顾客都承诺一个到达天数t, 如果按
: 时或者提前收到了,顾客就默认了.如果迟到了,该顾客就一定会在t+1天投诉。
: 现在要求你用这个方法求出x的准确值, 使得等待天数最短(用最短时间得到x), 要求
: 最多只能收到两次投诉,收到第三次投诉是不行的。
: 我明确告诉他,这题和一道经典的扔鸡蛋题类似,大体思路就是用第一次投诉机会确定一个范围,然后再收到投诉后改用线性探测。

j**l
发帖数: 2911
3
说说我事后诸葛亮想到的思路吧,面试45分钟想到太难了,就算知道原型的扔鸡蛋题也没有用,而且原型题也不是第一次见到就容易想到的。。。
不妨简化问题便于讨论,设要求的整常数x位于区间[1, 20]之间。
首先,20是不用测的,如果测19的时候收到complain, 则20即所求。
其次,如果不幸收到一个complain, 就好比摔碎了一个鸡蛋,接下来就必须用最慢的线
性探测了。
第一个探测的天数是多少呢?我们先来看看16。
假如探测16收到了complain, 那么我们最坏可能必须线性探测19, 18, 17, 那么总探测
天数是
19 + 18 + 17 + 16 = 70
假如探测16没有complain, 下一个探测的天数是多少呢?
注意到
16 + 15 + 14 + 13 + 12 = 70 <= 70, 再加11就超出
因此我们可以接着探测12
假如探测12收到了complain, 那么最坏可能总探测天数还是70
假如探测12没有complain, 下一个探测的天数是多少呢?
注意到
16 + 12 + 11 + 10 + 9 + 8 = 66 <= 70, 再加7就超出
因此
j**l
发帖数: 2911
4
100层楼,两个鸡蛋,探测哪层楼摔下鸡蛋仍然不破,而再上一层摔就破。
保证存在n, 1<= n <= 100, 当从n层以及n层以下扔鸡蛋不会破,而从n+1层扔鸡蛋就破
原理,先用第一个鸡蛋确定一个大的范围,再用第二个鸡蛋在这范围内线性探测
答案:
依次从14, 27, 39, 50, 60, 69, 77, 84, 90, 95, 99,100层扔第一个鸡蛋,如果摔
碎则线性探测,最坏情况都只需要扔14次

【在 K******g 的大作中提到】
: 麻烦你把google 那题也详细的写一下吧。多谢了
:
: ,
: 探测

b********h
发帖数: 119
5
扔14次不是要用14个鸡蛋了吗?直接用binary search不是更快,log(100),7次就可
以了。

【在 j**l 的大作中提到】
: 100层楼,两个鸡蛋,探测哪层楼摔下鸡蛋仍然不破,而再上一层摔就破。
: 保证存在n, 1<= n <= 100, 当从n层以及n层以下扔鸡蛋不会破,而从n+1层扔鸡蛋就破
: 原理,先用第一个鸡蛋确定一个大的范围,再用第二个鸡蛋在这范围内线性探测
: 答案:
: 依次从14, 27, 39, 50, 60, 69, 77, 84, 90, 95, 99,100层扔第一个鸡蛋,如果摔
: 碎则线性探测,最坏情况都只需要扔14次

l*y
发帖数: 21010
6
你只有两个鸡蛋,没法用binary search

【在 b********h 的大作中提到】
: 扔14次不是要用14个鸡蛋了吗?直接用binary search不是更快,log(100),7次就可
: 以了。

j**l
发帖数: 2911
7
第一个鸡蛋如果没有扔坏,可以接着再扔

【在 b********h 的大作中提到】
: 扔14次不是要用14个鸡蛋了吗?直接用binary search不是更快,log(100),7次就可
: 以了。

O*******r
发帖数: 753
8
....

【在 j**l 的大作中提到】
: 第一个鸡蛋如果没有扔坏,可以接着再扔
K******g
发帖数: 1870
9
同意,用Binary search更快.其实就是在一个0/1的有序数组里,找第一个出现的1. O(
logN),但是最坏的情况还是O(N).两题都可以用这种方法解决。比较经典,呵呵。

【在 b********h 的大作中提到】
: 扔14次不是要用14个鸡蛋了吗?直接用binary search不是更快,log(100),7次就可
: 以了。

j**l
发帖数: 2911
10
只有两个鸡蛋可以扔,还要保证最坏情况下扔的次数最少。
这变体题是最多只能收到两次投诉,还要保证最坏情况下探测等待的总天数最小

【在 K******g 的大作中提到】
: 同意,用Binary search更快.其实就是在一个0/1的有序数组里,找第一个出现的1. O(
: logN),但是最坏的情况还是O(N).两题都可以用这种方法解决。比较经典,呵呵。

相关主题
算法:按照字典序求第k个排列数问一个M的算法题
我也来道题吧Quick selection for k unsorted arrays
问道题(分球问题)大侠帮我看看这段程序
进入JobHunting版参与讨论
K******g
发帖数: 1870
11
不管怎么样,两个鸡蛋不够啊。
我觉得题目可能是说,让使用的鸡蛋数量最少吧。
谁有这题的原题?

【在 j**l 的大作中提到】
: 第一个鸡蛋如果没有扔坏,可以接着再扔
l*y
发帖数: 21010
12
你好好看看题吧

【在 K******g 的大作中提到】
: 不管怎么样,两个鸡蛋不够啊。
: 我觉得题目可能是说,让使用的鸡蛋数量最少吧。
: 谁有这题的原题?

i*****e
发帖数: 5233
13
你看看原题目吧

【在 K******g 的大作中提到】
: 不管怎么样,两个鸡蛋不够啊。
: 我觉得题目可能是说,让使用的鸡蛋数量最少吧。
: 谁有这题的原题?

Z*****Z
发帖数: 723
14
顺便问一下关于这个扔鸡蛋问题的解析解的理解。
假设允许drop次数为d,允许break鸡蛋个数为b,可以测得最大楼层为f(d,b)
那么f(d,b)= C(d, 1) + C(d, 2) + ... + C(d,b)
这个怎么理解?

【在 j**l 的大作中提到】
: 100层楼,两个鸡蛋,探测哪层楼摔下鸡蛋仍然不破,而再上一层摔就破。
: 保证存在n, 1<= n <= 100, 当从n层以及n层以下扔鸡蛋不会破,而从n+1层扔鸡蛋就破
: 原理,先用第一个鸡蛋确定一个大的范围,再用第二个鸡蛋在这范围内线性探测
: 答案:
: 依次从14, 27, 39, 50, 60, 69, 77, 84, 90, 95, 99,100层扔第一个鸡蛋,如果摔
: 碎则线性探测,最坏情况都只需要扔14次

B*****p
发帖数: 339
15
不用一个一个测
如果16收到complain,测18,如果complain, x = 17, otherwise, 测20

也没有用,而且原型题也不是第一次
见到就容易想到的。。。

【在 j**l 的大作中提到】
: 说说我事后诸葛亮想到的思路吧,面试45分钟想到太难了,就算知道原型的扔鸡蛋题也没有用,而且原型题也不是第一次见到就容易想到的。。。
: 不妨简化问题便于讨论,设要求的整常数x位于区间[1, 20]之间。
: 首先,20是不用测的,如果测19的时候收到complain, 则20即所求。
: 其次,如果不幸收到一个complain, 就好比摔碎了一个鸡蛋,接下来就必须用最慢的线
: 性探测了。
: 第一个探测的天数是多少呢?我们先来看看16。
: 假如探测16收到了complain, 那么我们最坏可能必须线性探测19, 18, 17, 那么总探测
: 天数是
: 19 + 18 + 17 + 16 = 70
: 假如探测16没有complain, 下一个探测的天数是多少呢?

y*c
发帖数: 904
16
明确题意+提供思路,假设第一次探测x
则如果x就complain的总天数 x + \sum_{i=x+1}^{i=99}
如果没有complain, 下一次探测总天数 x' + \sum_{i=x'+1}^{i=x-1}
如此下去得到x序列。
很明显,x 应该是比较接近100的一个数,x'是小于x的一个数。原则是希望每一轮总天
数接近。由于第二个“鸡蛋”的测试带来的是平方项,所以第一个鸡蛋测试的gap肯定
不是线性递减的。具体怎么算我还没什么办法。
j**l
发帖数: 2911
17
首先测20是无效测试,它总是不会收到complain的
按照你的说法,如果16收到complain, 测18,
如果有complain, 需要测x = 19来确定x是19还是20,如果测19有complain, 那么你就
有三次complain, 算失败
如果没有complain, 需要测x = 17来确定x是17还是18

【在 B*****p 的大作中提到】
: 不用一个一个测
: 如果16收到complain,测18,如果complain, x = 17, otherwise, 测20
:
: 也没有用,而且原型题也不是第一次
: 见到就容易想到的。。。

j**l
发帖数: 2911
18
在1 <= x <= 20的范围内,我觉得第一次测16是最好的,有complain则线性测19, 18,
17, 在没有complain的情况下接下来依次测12,8,1, 这样能够保证最怀情况下最多等
70天,
19 + 18 + 17 + (16) = 70, 假如第一次测16就收到第一次complain
(16) + 15 + 14 + 13 + (12) = 70, 假如第二次测12的时候才收到第一次complain
(16) + (12) + 11 + 10 + 9 + (8) = 66, 假如第三次测8的时候才收到第一次
complain
(16) + (12) + (8) + 7 + 6 + 5 + 4 + 3 + 2 + (1) = 64, 假如第四次测1的时候才
收到第一次complain
原型题得到的非等差数列,公差依次减少1,能够保证数列到达100层,还能使最坏情况
下,都只需要扔14次。
两题的相似处,都有一系列的插入点,一个是扔第一个鸡蛋的楼层14, 27, 39, 50...,
另一个则是没有收到第一次complain前的一系列探测天数点,比如16, 12,

【在 y*c 的大作中提到】
: 明确题意+提供思路,假设第一次探测x
: 则如果x就complain的总天数 x + \sum_{i=x+1}^{i=99}
: 如果没有complain, 下一次探测总天数 x' + \sum_{i=x'+1}^{i=x-1}
: 如此下去得到x序列。
: 很明显,x 应该是比较接近100的一个数,x'是小于x的一个数。原则是希望每一轮总天
: 数接近。由于第二个“鸡蛋”的测试带来的是平方项,所以第一个鸡蛋测试的gap肯定
: 不是线性递减的。具体怎么算我还没什么办法。

l****m
发帖数: 509
19
Amazon 的面试题为什么都是算法相关?没有别的问题吗?如果光作网页开发,用的着
这样吗?
j**l
发帖数: 2911
20
暂时还没有收到拒信,希望可以挺过去。
相关主题
弱弱的问问 2sum, 3sum 的问题摔鸡蛋问题是编程题么?
问一个G家的二维积水题目求intersect的圆,求O(nlogn)的方法
完了被Gayle complain了关于检查Binary tree是否balanced
进入JobHunting版参与讨论
j**l
发帖数: 2911
21
知道思想后应该可以编程穷举,从最大天数开始递减找到第一个合适的测试点,使得后
续的一系列测试点中最小的那个测试点能够到达1,然后穷举就可以停止。
C*Y
发帖数: 736
22
我很久以前也被问到扔鸡蛋的题目,当时没看过那道题,挣扎半天弄了一堆方程组没弄
出结果
a****a
发帖数: 1264
23
唉,赶紧回去补一下知识吧。
记得最初是给灯泡,测试灯泡的质量。

【在 K******g 的大作中提到】
: 不管怎么样,两个鸡蛋不够啊。
: 我觉得题目可能是说,让使用的鸡蛋数量最少吧。
: 谁有这题的原题?

B*****t
发帖数: 335
24
是个动态规划题,和扔鸡蛋的问题的本质一样,都是求min-max。复杂度O(x^2*(k-
1)), k是第几次投诉就告失败,用上二分的话可以优化到O(xlongx*(k-1)); 扔鸡蛋那
题可以优化到O(x*k),这题估计也可以。
DP方程是:
f[x][k] = min{max{m+f[m][k], (x-m)*(m+x-1)/2}, 1<=m 写了个程序,
当x=20, k=3的时候,第一个实验16,最坏情况下必须的天数是70,
不过第一个实验17,最坏情况下必须的天数是69.
x=100, k=3, 第一个应该实验92,最坏情况下必须的最少天数是792

没有用,而且原型题也不是第一次见到就容易想到的。。。
线
探测

【在 j**l 的大作中提到】
: 说说我事后诸葛亮想到的思路吧,面试45分钟想到太难了,就算知道原型的扔鸡蛋题也没有用,而且原型题也不是第一次见到就容易想到的。。。
: 不妨简化问题便于讨论,设要求的整常数x位于区间[1, 20]之间。
: 首先,20是不用测的,如果测19的时候收到complain, 则20即所求。
: 其次,如果不幸收到一个complain, 就好比摔碎了一个鸡蛋,接下来就必须用最慢的线
: 性探测了。
: 第一个探测的天数是多少呢?我们先来看看16。
: 假如探测16收到了complain, 那么我们最坏可能必须线性探测19, 18, 17, 那么总探测
: 天数是
: 19 + 18 + 17 + 16 = 70
: 假如探测16没有complain, 下一个探测的天数是多少呢?

j**l
发帖数: 2911
25
感觉你是对的,1 <= x <= 20的时候,应该从17开始试,最坏情况是69天。
19 + 18 + 17 = 54
17 + 16 + 15 + 14 = 62
17 + 14 + 13 + 12 + 11 = 67
17 + 14 + 11 + 10 + 9 + 8 = 69
17 + 14 + 11 + 8 + 7 + 6 + 5 = 68
17 + 14 + 11 + 8 + 5 + 4 + 3 + 2 + 1 = 65
DP的思路不好理解,感觉作为电面题太难。

【在 B*****t 的大作中提到】
: 是个动态规划题,和扔鸡蛋的问题的本质一样,都是求min-max。复杂度O(x^2*(k-
: 1)), k是第几次投诉就告失败,用上二分的话可以优化到O(xlongx*(k-1)); 扔鸡蛋那
: 题可以优化到O(x*k),这题估计也可以。
: DP方程是:
: f[x][k] = min{max{m+f[m][k], (x-m)*(m+x-1)/2}, 1<=m: 写了个程序,
: 当x=20, k=3的时候,第一个实验16,最坏情况下必须的天数是70,
: 不过第一个实验17,最坏情况下必须的天数是69.
: x=100, k=3, 第一个应该实验92,最坏情况下必须的最少天数是792
:

x********r
发帖数: 1206
26
Bless!
p******x
发帖数: 232
27
大概在700多天可以保证试出结果。思想确实与仍鸡蛋完全一样。考虑把1到100映射到1
至5050(或4950)即可。
s***e
发帖数: 793
28
是典型的DP问题,扔鸡蛋也是典型的DP问题。

【在 B*****t 的大作中提到】
: 是个动态规划题,和扔鸡蛋的问题的本质一样,都是求min-max。复杂度O(x^2*(k-
: 1)), k是第几次投诉就告失败,用上二分的话可以优化到O(xlongx*(k-1)); 扔鸡蛋那
: 题可以优化到O(x*k),这题估计也可以。
: DP方程是:
: f[x][k] = min{max{m+f[m][k], (x-m)*(m+x-1)/2}, 1<=m: 写了个程序,
: 当x=20, k=3的时候,第一个实验16,最坏情况下必须的天数是70,
: 不过第一个实验17,最坏情况下必须的天数是69.
: x=100, k=3, 第一个应该实验92,最坏情况下必须的最少天数是792
:

s***e
发帖数: 793
29
你的DP有点小问题,不是很精确( (x-m)*(m+1)/2 是k=2是的特例,不能做dp方程)
,探讨一下
F(l,u,k) 是最坏可能下需要的天数。 l 是可能范围的lower bound, u 是upper
bound
K 表示最大可以接受的投诉次数。
F(1,100,2)就是本题所优化的。
当k = 1时, 只能从大往小试, 承诺99,98,97,。。。。1,所须天数是100+99+98+
97。。。+2。
F(l,u,1) = u + (u-1) + (u-2) … (l+1) = (u+l+1)*(u-l)/2
动态方程是
F(l,u,k) = min { m + 1 + Max( F( l,m,k),F(m+1,u,k-1))} l<=m<=u;

【在 B*****t 的大作中提到】
: 是个动态规划题,和扔鸡蛋的问题的本质一样,都是求min-max。复杂度O(x^2*(k-
: 1)), k是第几次投诉就告失败,用上二分的话可以优化到O(xlongx*(k-1)); 扔鸡蛋那
: 题可以优化到O(x*k),这题估计也可以。
: DP方程是:
: f[x][k] = min{max{m+f[m][k], (x-m)*(m+x-1)/2}, 1<=m: 写了个程序,
: 当x=20, k=3的时候,第一个实验16,最坏情况下必须的天数是70,
: 不过第一个实验17,最坏情况下必须的天数是69.
: x=100, k=3, 第一个应该实验92,最坏情况下必须的最少天数是792
:

P********l
发帖数: 452
30
bless.

【在 j**l 的大作中提到】
: 暂时还没有收到拒信,希望可以挺过去。
相关主题
#面试题#有100个database,每个存1 million data,如何求出median number of 这些数。请教,求最近5分钟,10分钟,1小时内Top 3的搜索关键字, 这题有什么好的想法?
zenefits online test 讨论split a string into words in a dictionary这题有最坏情况比exponential 快的解法么?
扔鸡蛋那个题。。。。。不会。。。。这题有点意思 给一个数组, 找最大的整数m, 使得数组里比m大的或相等 的值的树木大于等于m(线性)
进入JobHunting版参与讨论
b********p
发帖数: 875
31
rl问题,dp解法
j**l
发帖数: 2911
32
RL是什么意思?对k = 2的特例,DP方程还是好理解的,有助于推广到k更大的情形

【在 b********p 的大作中提到】
: rl问题,dp解法
B*****t
发帖数: 335
33
多谢指正,我的那个dp方程是K=2的特例,K>2时类似。
用F(l,u,k)表示状态,方程好写,不过复杂度要多乘以O(N),
注意到F(a,b,k)和F(1,b-a+1,k)的关系,可以用F(n,k)表示状态,状态转移的时候
要注意把前面略去的天数补上,具体可以递归的求出应该补上多少天,这样复杂度就可
以降一维。

方程)
upper
100+99+98+

【在 s***e 的大作中提到】
: 你的DP有点小问题,不是很精确( (x-m)*(m+1)/2 是k=2是的特例,不能做dp方程)
: ,探讨一下
: F(l,u,k) 是最坏可能下需要的天数。 l 是可能范围的lower bound, u 是upper
: bound
: K 表示最大可以接受的投诉次数。
: F(1,100,2)就是本题所优化的。
: 当k = 1时, 只能从大往小试, 承诺99,98,97,。。。。1,所须天数是100+99+98+
: 97。。。+2。
: F(l,u,1) = u + (u-1) + (u-2) … (l+1) = (u+l+1)*(u-l)/2
: 动态方程是

j**l
发帖数: 2911
34
对100层楼,2个鸡蛋的问题,共有六组解都能保证最坏情况下最多扔14次
9-->22-->34-->45-->55-->64-->72-->79-->85-->90-->94-->97-->99-->100
10-->23-->35-->46-->56-->65-->73-->80-->86-->91-->95-->98-->100
11-->24-->36-->47-->57-->66-->74-->81-->87-->92-->96-->99-->100
12-->25-->37-->48-->58-->67-->75-->82-->88-->93-->97-->100
13-->26-->38-->49-->59-->68-->76-->83-->89-->94-->98-->100
14-->27-->39-->50-->60-->69-->77-->84-->90-->95-->99-->100
第六组解是网上最常见的解答,求出1 + 2 + ... + 14刚刚超过100
第一组解是动态规划求出的解答。
第一组解,第一个鸡蛋最多共测试14层
第二组和第三组解,第一个鸡蛋最多
l*******g
发帖数: 4894
35
祝福楼主,这种题目关键是得练过吃透,鸡蛋问题有一篇paper找来读读,上面写了
general的情况是怎么解决的,如果看过那片paper,或许这个问题你就好解决了。
j**l
发帖数: 2911
36
那篇paper的名字?

【在 l*******g 的大作中提到】
: 祝福楼主,这种题目关键是得练过吃透,鸡蛋问题有一篇paper找来读读,上面写了
: general的情况是怎么解决的,如果看过那片paper,或许这个问题你就好解决了。

l********s
发帖数: 30
37
嗯,一开始我也把它跟扔鸡蛋相类比,但不像扔鸡蛋题那样,能找出一个关于x 的简单
不等式。于是也 DP了。不过,我的结果和大家有点不同,仔细分析了大家的回复,发
现对这道题的理解略有不同。我觉得有两个问题需要澄清。
为了更清楚地说明我的思法,我定义一个 transaction 为:一个东西从 A 发到 B 地
的某个顾客,并许诺 y 天内到达。而这个 transaction 被认为是完成的,如果:y 天
过去了,没有接到用户投诉,或者接到了用户投诉。
这样,我的两个问题是:
1)能不能在一个transaction T 还没有完成之前,在某一天(可能是和发起 T 同一天
)再发起另一个 transaction W?
2)如果对 1)的回答是肯定的,那么,“最多只准收到两次投诉”,是指在找出 x 之
前,还是在所有已经发起的 transaction 都完成之后?
而我的理解是:
1)可以。否则为何要强调“顾客的数量不限制”呢?
2)都可以说得通。不同的理解有不同的解法。但个人认为,这“最多两次投诉”的限
制应该是在所有已经发起的 transaction 都完成之后,才比较符合原题的意思。


【在 j**l 的大作中提到】
: 那篇paper的名字?
Z*****Z
发帖数: 723
38
我觉得你的优化是对的。
楼主的解法是,在求解f[i]的时候,先发一个时间为j的包裹。用了你的优化,同时再发
一个i-1的包裹,这样原来的一个worst case(sum j ... i-1)就变成了i-1,从而总的时
间变短了。

【在 l********s 的大作中提到】
: 嗯,一开始我也把它跟扔鸡蛋相类比,但不像扔鸡蛋题那样,能找出一个关于x 的简单
: 不等式。于是也 DP了。不过,我的结果和大家有点不同,仔细分析了大家的回复,发
: 现对这道题的理解略有不同。我觉得有两个问题需要澄清。
: 为了更清楚地说明我的思法,我定义一个 transaction 为:一个东西从 A 发到 B 地
: 的某个顾客,并许诺 y 天内到达。而这个 transaction 被认为是完成的,如果:y 天
: 过去了,没有接到用户投诉,或者接到了用户投诉。
: 这样,我的两个问题是:
: 1)能不能在一个transaction T 还没有完成之前,在某一天(可能是和发起 T 同一天
: )再发起另一个 transaction W?
: 2)如果对 1)的回答是肯定的,那么,“最多只准收到两次投诉”,是指在找出 x 之

j**l
发帖数: 2911
39
好像是把sum(j .. i-1)优化为sum(j+1 .. i-1), 少用了j天本身

再发
的时

【在 Z*****Z 的大作中提到】
: 我觉得你的优化是对的。
: 楼主的解法是,在求解f[i]的时候,先发一个时间为j的包裹。用了你的优化,同时再发
: 一个i-1的包裹,这样原来的一个worst case(sum j ... i-1)就变成了i-1,从而总的时
: 间变短了。

Z*****Z
发帖数: 723
40
对,是这样的

【在 j**l 的大作中提到】
: 好像是把sum(j .. i-1)优化为sum(j+1 .. i-1), 少用了j天本身
:
: 再发
: 的时

相关主题
这题有点意思 给一个数组, 找最大的整数m, 使得数组里比m大的或相等 的值的树木大于等于m(线性)我也来道题吧
扔鸡蛋的问题问道题(分球问题)
算法:按照字典序求第k个排列数问一个M的算法题
进入JobHunting版参与讨论
j**l
发帖数: 2911
41
路漫漫其修远兮,吾将上下而求索。
x********r
发帖数: 1206
42
恭喜! 恭喜!

【在 j**l 的大作中提到】
: 路漫漫其修远兮,吾将上下而求索。
t*****j
发帖数: 1105
43
我的思路和你一样,不过编程的时候有个要注意的地方:
动态方程是
F(l,u,k) = min { m + 1 + Max( F( l,m,k),F(m+1,u,k-1))} l<=m<=u;
~~~~~~~这边1<=m 的。
可是为什么我计算机算出来的没有700天呢?
哪位高人也编一下,咱们对对结果?我的function k=2,x=20的时候返回29.


98+

【在 s***e 的大作中提到】
: 你的DP有点小问题,不是很精确( (x-m)*(m+1)/2 是k=2是的特例,不能做dp方程)
: ,探讨一下
: F(l,u,k) 是最坏可能下需要的天数。 l 是可能范围的lower bound, u 是upper
: bound
: K 表示最大可以接受的投诉次数。
: F(1,100,2)就是本题所优化的。
: 当k = 1时, 只能从大往小试, 承诺99,98,97,。。。。1,所须天数是100+99+98+
: 97。。。+2。
: F(l,u,1) = u + (u-1) + (u-2) … (l+1) = (u+l+1)*(u-l)/2
: 动态方程是

1 (共1页)
进入JobHunting版参与讨论
相关主题
求intersect的圆,求O(nlogn)的方法扔鸡蛋的问题
关于检查Binary tree是否balanced算法:按照字典序求第k个排列数
#面试题#有100个database,每个存1 million data,如何求出median number of 这些数。我也来道题吧
zenefits online test 讨论问道题(分球问题)
扔鸡蛋那个题。。。。。不会。。。。问一个M的算法题
请教,求最近5分钟,10分钟,1小时内Top 3的搜索关键字, 这题有什么好的想法?Quick selection for k unsorted arrays
split a string into words in a dictionary这题有最坏情况比exponential 快的解法么?大侠帮我看看这段程序
这题有点意思 给一个数组, 找最大的整数m, 使得数组里比m大的或相等 的值的树木大于等于m(线性)弱弱的问问 2sum, 3sum 的问题
相关话题的讨论汇总
话题: 鸡蛋话题: complain话题: 天数话题: 探测话题: dp