zoukankan      html  css  js  c++  java
  • 【洛谷习题】皇后游戏

    题目链接:https://www.luogu.org/problemnew/show/P2123


    难度很大,这道题在洛谷上的题解也很少,所以严格意义上,我写的不算题解。

    这道题,我的确做出来了,但没办法证明我做的是对的。

    类似国王游戏,我们考虑两个大臣的顺序。这里我投机取巧,考虑了最特殊的开头两个大臣。

    不难列出相应的式子,发现要是获得奖金最多的大臣获奖最少,两位大臣需要满足a1+b2+max(b1,a2)<a2+b1+max(b2,a1)。

    根据题意,后面的大臣一定会比前面的大臣获奖多,所以按要求排序后,最后一个大臣获奖数就是答案。

    还要注意用long long,这方面比国王游戏好多了,不用写烦人的高精度。

     1 #include <cstdio>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 typedef long long ll;
     7 
     8 const int maxn = 2e4 + 5;
     9 
    10 struct Minister {
    11     ll a, b;
    12     bool operator < (const Minister& rhs) {
    13         return a + rhs.b + max(b, rhs.a) < rhs.a + b + max(rhs.b, a);
    14     }
    15 } minister[maxn];
    16 
    17 ll c[maxn];
    18 
    19 int main() {
    20     int t, n;
    21     scanf("%d", &t);
    22     while (t--) {
    23         scanf("%d", &n);
    24         for (int i = 1; i <= n; ++i)
    25             scanf("%lld%lld", &minister[i].a, &minister[i].b);
    26         sort(minister + 1, minister + n + 1);
    27         ll sum = 0;
    28         for(int i = 1; i <= n; ++i) {
    29             sum += minister[i].a;
    30             c[i] = max(sum, c[i - 1]) + minister[i].b;
    31         }
    32         printf("%lld
    ", c[n]);
    33     }
    34     return 0;
    35 }
    AC代码
  • 相关阅读:
    WebDriver关闭窗口
    WebDriver切换窗口
    WebDriver处理截屏
    获取当前窗口的地址栏url地址
    WebDriver获取当前窗口的title
    复选框
    勾选框
    单选框
    VUE 中获取摄像头进行扫码
    js byte 与 进制 相互转换
  • 原文地址:https://www.cnblogs.com/Mr94Kevin/p/9800743.html
Copyright © 2011-2022 走看看