您的位置:首页 > 其它

HDU 4221 贪心

2018-02-22 15:38 141 查看
HDU 4221 Greedy?题意:有作业每个作业有耗时和死线,超过死线完成的要扣除完成日期和死线的差,单线写作业,且作业不可拆分,求出最小的最大扣除。题解:贪心,先随便安排一个顺序,这里对于两个相邻的作业,交换这两个作业的顺序,对于这个顺序的其他部分没有任何影响,那么这两个作业的两种顺序,显然是先做截止日期早的更优因为将截止日期早的从后面换到前面,永远不会增加扣分,所以将所有两两交换优化之后实际上就是按截止日期冒泡排序。
#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
int p,d;
}a[100005];
int cmp(node a,node b){
return a.d<b.d;
}
int main()
{
int T,n,i,icase=0;
long long day,sum;
scanf("%d",&T);
while(T--){
icase++;
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d%d",&a[i].p,&a[i].d);
sort(a,a+n,cmp);
sum=0;day=0;
for(i=0;i<n;i++){
day+=a[i].p;
if(day-a[i].d>sum)sum=day-a[i].d;
}
printf("Case %d: %lld\n",icase,sum);

}
return 0;
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: