zoukankan      html  css  js  c++  java
  • CF1293B

    如果f[x]表示有x个对手时候的最大获益。不难看出f[x] = max(f[i] + 1 - i / x)。i表示这次答题后剩下几个队首。

    不难看出,随着x的增加,最大转移的i也是单调的,然后单调性优化下就可以了。

     1 #include <cstdio>
     2 using namespace std;
     3 int n,l;
     4 double f[110000];
     5 double getval(int x,int y)
     6 {
     7     return (x * f[y] + x - y) / x;
     8 }
     9 int main()
    10 {
    11     scanf("%d",&n);
    12     f[0] = 0.0;
    13     l = 0; 
    14     for (int i = 1;i <= n;i++)
    15         for (;l < i;l++)
    16         {
    17             if (getval(i,l) > getval(i,l + 1))
    18             {
    19                 f[i] = getval(i,l);
    20                 break;
    21             }
    22         }
    23     printf("%.6lf
    ",f[n]);
    24     return 0;
    25 }
  • 相关阅读:
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/iat14/p/12272027.html
Copyright © 2011-2022 走看看