这个题意思就是说 n个部下,完成n个任务。要达到的最终目标是总用时尽可能少
每个部下有两个属性 丢一个是你布置任务需要的时间 b 第二个是他完成任务需要的时间 j
同一时刻 你只能向一个人布置任务 但是同一时刻可以有多个人同时执行任务
首先想到的就是贪心 用一个结构体保存 没个部下
这里发现一个问题 就是 struct 里面写了函数的话 就没法开全局数组了,必须开在函数里
之后排序,根据是 j越大的任务先安排,这是一种思维的直觉,越大的越早安排,任务执行的时间里 既可以安排其他任务 同时还可以多个任务执行
排序以后 就要算最终的时间了
顺便一提
algorithm 里有现成的 max 函数 和swap函数 其中swap函数 直接传两个参数就行
设置两个int btime 和 ans;
btime+=arr[i].b;
表示 处理到第i个数据的时候,安排用的总时间
ans=max(ans,btime+arr[i].j);
也就是说 每一次执行 要么是所有安排时间 加这一步的执行时间 要么就是上一步的时间还有剩下
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int maxn=1000+10;
struct Node{
int b,j;
bool operator < (const Node & n)const
{
return j>n.j;
}
};
int main()
{
Node arr[maxn];
int n,i,ca=1;
while(scanf("%d",&n),n)
{
for(i=0;i<n;++i)
{
scanf("%d %d",&arr[i].b,&arr[i].j);
}
sort(arr,arr+n);
int btime=0,ans=0;
for(i=0;i<n;++i)
{
btime+=arr[i].b;
ans=max(ans,btime+arr[i].j);
}
printf("Case %d: %d\n",ca++,ans);
}
return 0;
}