11 2013 档案
摘要:分析:首先我们要知道调用swap()函数的次数跟什么有关。可以观察发现在Insertion Sort里,当且仅当a[j](j∈[0,i)) > a[i]时会调用一次swap(),也就是说有多少个a[j](j∈[0,i)) > a[i]成立就会调用多少次swap()(因为a[i]前面的序列都是有序的),这个数目也叫逆序数。所以要使调用swap()的次数最少,就应该要使整个序列的总的逆序数最小。这时,我们可以枚举所有不同的两个位置对换之后的总逆序数来找最小的总逆序数。但枚举的时候我们需要知道a[i]与a[j]对换之后各自的逆序数以及对换之前的逆序数,记为b[i][j]、b[j][i]、
阅读全文
摘要:题意:有m个人,每人只有一张50元,还有n个人,每人只有一张100元,这些人排队买50元的电影票。售票处一开始没有钱,问要让这m+n个人全部顺利买票的排队方法有多少种。分析:把只有50元的人记为0,把只有100元的人记为1,问题等价于,m个0,n个1组成的序列中,由左向右累计,在任意一个位置的0的累计数都不少于1的累计数的序列有多少排列方式,结果再乘以m!n!(因为每个人都是不同的)。这道题有一个巧妙的解法:n=0时,答案显然是m!m=n的情况。m=6,n=6时,一个非法的序列例如,001101100011(6个0,6个1),把第一个使序列非法的1右面的每个位翻转,即变成00110111110
阅读全文

浙公网安备 33010602011771号