• [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]为关键字进行排序即可 
    贪心推导

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

  • 相关阅读:
    JavaScript事件详解
    JavaScript事件
    十六进制转十进制原理
    java:数组复制
    java:数组扩容
    MySQL---Day2
    Pyhton学习——Day47
    MySQL---Day1
    Pyhton学习——Day46
    Someing-About-Work
  • 原文地址:https://www.cnblogs.com/vincent-hwh/p/7367967.html
Copyright © 2020-2023  润新知