题意
有n个任务,每个人物需要安排B秒,需要执行J秒,被安排同一时间可以执行多个被安排的任务,但是同一时间智能安排一个任务。问怎样安排任务总时间最小。
思路
一开始的思路
一开始凭直觉感觉,这是一道排序题。
执行时间长的任务应该先执行,同时安排时间少的任务先安排。
后来标程的思路
无论安排时间长短,总安排时间是一定的,所以安排时间对于安排的先后顺序没有影响,而执行时间长的应该先执行。
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef struct Poi
{
int s,d;
bool operator < (const Poi& a) const
{
return d > a.d;
}
}poi;
void solve(void)
{
int j = 0;
int n;
while(scanf("%d",&n),n)
{
vector<poi>p;
for(int i = 0 ; i < n ; i++)
{
poi temp;
scanf("%d%d",&temp.s,&temp.d);
p.push_back(temp);
}
sort(p.begin(),p.end());
int ans = 0;
int maxx = 0;
for(int i = 0 ; i < n ; i++)
{
///更新安排时间,安排时间跟执行时间没关系,所以总安排时间也不用去管执行时间。
ans += p[i].s;
maxx = max(ans+p[i].d,maxx);///确定最长终结束时间
}
printf("Case %d: %d\n",++j,maxx);
}
}
int main(void)
{
solve();
return 0;
}
相比起来……
没有考虑到无论怎么完成安排时间都相等,导致增加了代码量与运算量。
所能学到的
自定义比较方法的写法又再一次复习了一次。
sort函数重载<符号
typedef struct Poi
{
int s,d;
bool operator < (const Poi& a) const
{
return d > a.d;
}
}poi;