Problem: http://acm.hdu.edu.cn/showproblem.php?pid=4221
对所有任务按截止时间从小到大排序
然后一次计算每个任务完成的时间 和超过截止的时间 取最大值
#include<cstdio> #include<algorithm> using namespace std; #define MAXN 100010 struct Task{ int c,d; }w[MAXN]; bool cmp(Task a,Task b){ return a.d<b.d; } int main() { int t,n; scanf("%d",&t); for(int k=1;k<=t;k++){ scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d%d",&w[i].c,&w[i].d); sort(w,w+n,cmp);//按截止时间从小到大排序 long long ans=0,sum=0; for(int i=0;i<n;i++){ sum+=w[i].c;//任务完成时间 ans=max(ans,sum-w[i].d);//取超过截止时间的最大值 } printf("Case %d: %I64d ",k,ans); } return 0; }
刚开始忘了用long long,只是给我返回的居然是TLE,我就不理解了,我怒了.....!