蓝书 第一章 例题2 突击战
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝书 第一章 例题2 突击战相关的知识,希望对你有一定的参考价值。
解法:贪心
按执行任务的时间从大到小排序,记录一个最晚结束的时间ans,并且实时更新ans,取最大的值(即最晚结束时间)
因为所有的交代时间必须执行,所以只要按执行时间排序就行。
当前最晚结束时间为 当前总的交代时间加上当前的执行时间
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 1e4+5;
struct node
{
int j,b;
bool operator < (const node&a)const
{
return j>a.j;
}
}c[N];
int main()
{
int n,kase=0;
while(cin>>n)
{
if(n==0) break;
for(int i=1;i<=n;i++) cin>>c[i].b>>c[i].j;
sort(c+1,c+1+n);
ll ans = 0;
ll sum = 0;
for(int i=1;i<=n;i++)
{
sum += c[i].b;
ans = max(ans,sum+c[i].j);//最晚结束时间为当前总的交代时间加上当前的执行时间 与之前的最晚结束时间比较
}
cout<<"Case "<<++kase<<": "<<ans<<'\\n';
}
return 0;
}
注意:
结构体重载:
在struct,map,set中,重载< 使其从小到大排序 (set 默认是小顶堆) 顺序和我们习惯的是相同的。return x<a.x;是从小到大排序的
优先队列重载
在priority_queue中,优先队列默认是大顶堆, 所以 d<x.d 为真时 是从大到小排序的,顺序和我们习惯的是相反的
以上是关于蓝书 第一章 例题2 突击战的主要内容,如果未能解决你的问题,请参考以下文章