愚妄——如果想在 10 道中对上 7 道
问题不十分大,但很细。
有 10 道没有题面的判断题。A 和 B 在俩小黑屋中,只能和主持人对话。主持人首先告诉 A 这 10 题按顺序的答案,接着对于每道题,两人各自告诉主持人自己的选择,主持人再告诉两人正确答案与对方的选择,之后方可回答下一题。若两人的选择均与正确答案相同,称此题“答对了”。假设 A 与 B 被关进小黑屋前已经约定好了策略,求在任意情况下至少答对 7 题的策略。
不妨拓展一下,假使试图在
设
于是可以写出转移:
为何是“
但显然如果
(之后供题人就被我们联合声讨了,严肃反省之后改成了 9 对 6。)
将上面转移中的“
那么会首先注意到如下几点:
由此可以预见其存在两条分界线对应两个
然而事情没这么简单,不妨写个代码看看前几个
g[15][15],i,j;
#define min(x,y)({int a=(x),b=(y);(a<b?a:b);})
main()
{
for(i=0;i<15;i++)
{
g[i][0]=1<<i,g[i][i]=1;
for(j=1;j<i;j++)
g[i][j]=min(1<<i-1,g[i-1][j-1]+g[i-1][j])+min(1<<i-1,g[i-1][j]<<1);
for(j=0;j<i;j++)
if(g[i][j]==1<<i)
printf("-\t");
else
printf("%d\t",g[i][j]);
puts(i?"1":"-");
}
}
只看见了一条分界线。(其实中间并非没有,仔细看能看见一个
为何会如此呢?
答案也十分显然:分界线左侧都是指数级增长的,而右侧却是多项式级别增长的,因此两条分界线中间的区域几乎不存在,才只能看见一条分界线。
分界线右侧的多项式如下:
暂时还看不出规律。
不过很容易可以看出这个错误数量的量级大概是
这实在是令人汗颜。因为这比某乎上一些人求出的低很多。
剩下的待会也不再写。