【Commando War】【UVA - 11729】(思维+排序)

版权声明:本人原创,未经许可,不得转载 https://blog.csdn.net/qq_42505741/article/details/84824644

题目:

     “Waiting for orders we held in the wood, word from the front never came By evening the sound of the gunfire was miles away Ah softly we moved through the shadows, slip away through the trees Crossing their lines in the mists in the fields on our hands and our knees And all that I ever, was able to see The fire in the air, glowing red, silhouetting the smoke on the breeze”

      There is a war and it doesn’t look very promising for your country. Now it’s time to act. You have a commando squad at your disposal and planning an ambush on an important enemy camp located nearby. You have N soldiers in your squad. In your master-plan, every single soldier has a unique responsibility and you don’t want any of your soldier to know the plan for other soldiers so that everyone can focus on his task only. In order to enforce this, you brief every individual soldier about his tasks separately and just before sending him to the battlefield. You know that every single soldier needs a certain amount of time to execute his job. You also know very clearly how much time you need to brief every single soldier. Being anxious to finish the total operation as soon as possible, you need to find an order of briefing your soldiers that will minimize the time necessary for all the soldiers to complete their tasks. You may assume that, no soldier has a plan that depends on the tasks of his fellows. In other words, once a soldier begins a task, he can finish it without the necessity of pausing in between.

Input

There will be multiple test cases in the input file. Every test case starts with an integer N (1 ≤ N ≤ 1000), denoting the number of soldiers. Each of the following N lines describe a soldier with two integers B (1 ≤ B ≤ 10000) & J (1 ≤ J ≤ 10000). B seconds are needed to brief the soldier while completing his job needs J seconds. The end of input will be denoted by a case with N = 0. This case should not be processed.

Output

For each test case, print a line in the format, ‘Case X: Y ’, where X is the case number & Y is the total number of seconds counted from the start of your first briefing till the completion of all jobs.

Sample Input

3

2 5

3 2

扫描二维码关注公众号,回复: 4379356 查看本文章

2 1

3

3 3

4 4

5 5

0

Sample Output

Case 1: 8

Case 2: 15

解题报告:题目大意就是有n个任务,然后每个任务都有自己的安排部署时间和员工执行任务的时间,问最长需要多久才可以让工作全部完成。根据生活常识可以知道,咱们要把执行时间长的先安排下去,那么最可以节省时间,因为安排下去之后,在前一任务的执行过程中,咱们可以继续安排,只要记录最长时间就可以,因为存在这个任务执行时间超级长,能比它之后的所有的任务的部署和执行时间都长。

ac代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long ll;

const int maxn=1e5+1000;

struct node{
	int b;//部署时间
	int p;//执行时间
}num[maxn];

bool cmp(node a,node b)
{
	return a.p>b.p;
}//按照执行时间的降序排序
int main()
{
	int n;
	int kase=0;
	while(scanf("%d",&n)!=EOF&&n)
	{
		for(int i=0;i<n;i++)
		{
			scanf("%d%d",&num[i].b,&num[i].p);
		}
		sort(num,num+n,cmp);
		int sum=0,ans=0;
		for(int i=0;i<n;i++)
		{
			sum+=num[i].b;//依次部署的时间之和	
			ans=max(sum+num[i].p,ans);//每次部署之后加上该任务的完成时间,求最长的时间耗度。
		}
		
		//sum+=num[n-1].pa;
		printf("Case %d: %d\n",++kase,ans);
	}
}
/*
3
2 5
3 2
2 1
3
3 3
4 4
5 5
0
*/

猜你喜欢

转载自blog.csdn.net/qq_42505741/article/details/84824644