蓝书 第一章 例题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 突击战的主要内容,如果未能解决你的问题,请参考以下文章

蓝书第一章 例题3 分金币

蓝书 第一章 例题5 蚂蚁 uva

蓝书 第一章 例题1 勇者斗恶龙

蓝书 第一章 例题14 填充正方形

Commando War

《通信原理》复习笔记1----第一章绪论相关例题