zoukankan      html  css  js  c++  java
  • HDU-4221 Greedy? 贪心 从元素的相对位置开始考虑

    题目链接:https://cn.vjudge.net/problem/HDU-4221

    题意

    给n个活动,每个活动需要一段时间C来完成,并且有一个截止时间D
    当完成时间t大于截止时间完成时,会扣除t-D分
    找出如何使所扣分的最大值最小的那个最小值

    思路

    又是一道最小化最大值的题目
    入手点还是相对位置
    一样地讨论任意两个元素,使第一个元素放在前面为最优解,分析条件
    d越小越在前面

    提交过程

    AC 套路题

    代码

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn=1e5+20;
    struct Node{
        long long c, d;
        bool operator < (Node &a) const{
            return d<a.d;
        }
    }node[maxn];
    
    int main(void){
        int T, n, cnt=1;
    
        scanf("%d", &T);
        while (T--){
            scanf("%d", &n);
            for (int i=0; i<n; i++)
                scanf("%lld%lld", &node[i].c, &node[i].d);
            sort(node, node+n);
    
            long long ans=0, sum=0;
            for (int i=0; i<n; i++){
                long long delta=sum+node[i].c-node[i].d;
                if (delta>ans) ans=delta;
                sum+=node[i].c;
            }printf("Case %d: %lld
    ", cnt++, ans);
        }
    
        return 0;
    }
    
    
    Time Memory Length Lang Submitted
    655ms 3168kB 667 G++ 2018-06-23 15:00:50
  • 相关阅读:
    oo第四次博客
    oo第三次博客
    oo第二次博客
    oo第一次博客
    OO第四次博客
    OO第三次博客总结
    第二次博客总结
    oo第一次博客总结
    oo第四次博客作业
    oo第三次博客作业
  • 原文地址:https://www.cnblogs.com/tanglizi/p/9219080.html
Copyright © 2011-2022 走看看