[noip2012d1t2] 国王游戏

 题意:给定一个序列,每个点有a,b两个权值,每个点的sum值等于前面所有点a值的乘积/该点的b值

            序列的值等于所有点的sum的最大值。

该序列的点不具单调性,所以无法二分,考虑贪心

首先只考虑由相邻两个数组成的二元组
显然它们的排列顺序对前后所有点的值都没有影响
设这两个数的权值分别为val[i],val[i+1];
设sum[i]表示1~i的左权值乘积(sum[i]=sum[i-1]*left[i]);
则有:
val[i]=sum[i-1]/right[i]
val[i+1]=sum[i]/right[i+1]
故:
val[i+1]=sum[i-1]*left[i]/right[i+1]
        =val[i]*left[i]*right[i]/right[i+1] 
显然前一个数的left[i]*right[i]对后一个数有影响
推广到整个序列,则以left[i]*right[i]为关键字进行排序即可 
贪心推导

由于数据规模过大,还需要打高精度...就写得很丑

posted @ 2017-08-15 21:45  Vincent_hwh  阅读(145)  评论(0编辑  收藏  举报