题意
给出n,等概率地生成一个1~n的数列。现在有n个人从左到右站成一排,每个人拿有当前数列位置上的数字,并且一开始都不知道数字是多少(但知道n是多少)。从左到右让每个人进行如下选择:
1.选择保留自己的卡片,让所有人知道这个卡片上面的数字,并且走到等待区中。第一个人只能进行该选择。
2.选定等待区中的一个人,将自己的卡片与其交换,然后自己带着交换后的卡片退出游戏。等待区中的那个人会让所有人知道这个卡片上面的数字。
假如每个人都绝顶聪明,都想最大化自己的数字,求出等待区中人数的期望。n≤1E15,保留10位有效数字。
例如:E(2)=1.500000000
一开始的数列为[2,1],一开始所有人不知道自己的数字。第一个人翻开后给所有人看,第二个人会知道自己只会是1,就和第一个人交换卡片,最后第一个人数字为1,第二个人数字为1,等待区中还有1人。
一开始的数列为[1,2],一开始所有人不知道自己的数字。第一个人翻开后给所有人看,第二个人会知道自己是2,不交换,最后第一个人数字为1,第二个人数字为2,等待区中还有2人。
思考
不错的题目。手算n≤3发现是个调和级数,现在来证明。
首先,若等待区最大的数字为k,且数字构成了1~k的排列,下一个必然会走到等待区;否则,下一个会和等待区中最大的数字进行交换。
1.构成了1~k的排列:若和1~k的数字进行交换,那结果必然会小于等于k,而下一个人以及下一个人之后手上的数字显然大于k,所以只会进入等待区。
2.构不成1~k的排列:设最小未出现的数字为p,下一个人的数字为m,有两种情况:
1.m=p。若进入等待区,不会再有人来与自己交换数字,因此结果不会变优。
2.m>p。若进入等待区,从最后一个人向前考虑。若一个人知道自己数字不交换会变劣,他必然会选择前面的人进行交换;前面的人知道自己被交换会变劣,就会先和前面的人交换……直到p出现。这样一来,m仍然会被替换为p。
综上,下一人一定会选择交换。
这样考虑从n-1转移到n。从n-1的排列中插入n,若n在末尾,则有(n-1)!种可能,等待区中的人数会多1;若n不在末尾,原先形成连续的排列在经过n后仍会形成连续的排列,不是连续的排列仍不是连续的排列,对应到了n-1中,则有(n-1)*(n-1)!中可能。
故E(n)=E(n-1)+1/(n),调和级数。