HDU--4221--Greedy?

来源:互联网 发布:网络宣传要会什么 编辑:程序博客网 时间:2024/06/06 02:33

题目
这个题目题意有点容易理解错,理解了后就比较简单了。

题目要求的是求出总罚值最小的情况下最大的罚值
要让总罚值最小,将最小期限Di排序,然后将最大的罚值求出来就可以了。

#include<cstdio>#include<algorithm>using namespace std;struct Time                 //定义Di , Ci 的结构体,方便排序操作{    int Ci;    int Di;};bool cmp(Time a,Time b)    //定义比较函数{    return a.Di<b.Di;}Time a[100005];int main(){    int T,ca=0;    scanf("%d",&T);    while(T--)    {        ca++;        int n;        long long sum=0,ans=0;        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%d%d",&a[i].Ci,&a[i].Di);        }        sort(a,a+n,cmp);    //快速排序        for(int i=0;i<n;i++)        {            ans+=a[i].Ci;            if(ans-a[i].Di>sum)                sum=ans-a[i].Di;        }        printf("Case %d: %lld\n",ca,sum);    }}

题目还是比较简单的,运用的就只有对结构体进行排序知识点,不是很难。

原创粉丝点击