标签:
链接:https://uva.onlinejudge.org/external/117/11729.pdf
题意:有若干个战士需要分配任务,分配任务必须独立,完成任务也需要时间,问至少需要多少时间来完成所有任务。
题解:简单的贪心,因为分配任务的时间是固定的,所以只需要按照完成任务需要的时间排序即可。
//但是被自己的疏忽强行喂屎,一开始双重for循环居然用了同一个i,这是怎么过样例的。。。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> #include<algorithm> #include<vector> using namespace std; const int maxn=1000+100; vector<int>t; struct node { int x,y; }p[maxn]; int cmp(struct node a,struct node b) { return a.y>b.y; } int main() { int n,kase=0; while(cin>>n&&n) { t.clear(); for(int i=0;i<n;i++) cin>>p[i].x>>p[i].y; int ans=0; sort(p,p+n,cmp); cout<<"Case "<<++kase<<": "; ans+=p[0].x; t.push_back(p[0].y); for(int i=1;i<n;i++) { ans+=p[i].x; for(int j=0;j<t.size();j++) { if(t[j]<=p[i].x) t[j]=0; else t[j]-=p[i].x; } t.push_back(p[i].y); } int maxx=-1; for(int i=0;i<t.size();i++) maxx=max(t[i],maxx); ans+=maxx; cout<<ans<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/diang/p/4803661.html