uva11729

题意:
现在有n个士兵,你要给n个士兵布置任务;第i个士兵要花bi时间给他布置任务,并且他要花ji时间去完成任务.你一次只能给一个士兵布置任务.但是布置任务的时候,其他士兵可以在做任务,并且可以同时在做任务;问布置任务加完成任务的时间最少是多少;
思路:
首先可以知道,完成任务时间最长的士兵肯定是先布置任务(这样就能同时做更多事),所以将士兵按任务完成时间从大到小排序,然后算出这个时间就行了.
算时间就是看看这个任务布置完,所有要花的时间是多少,和之前的比较,更新最大值;


#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int N = 1005;
struct soil {
	int B;
	int J;
}s[N];
int n;

int cmp(soil a , soil b) {
	return a.J > b.J;
}
int main () {
	int cas = 1;
	while(scanf("%d",&n) && n) {
		for(int i = 0 ; i < n ; i++) {
			scanf("%d%d",&s[i].B , &s[i].J);	
		}
		sort(s , s + n , cmp);
		int total = 0;
		int t = 0;
		int temp;
		for(int i = 0 ; i < n ; i++) {
			temp = 0;
			t += s[i].B;
			if(t + s[i].J > total)
				total = t + s[i].J;
		}
		printf("Case %d: %d\n",cas++ , total);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值