貪欲なスケジューリング問題

トレーニング1 - タイトル

「ACなしでこの夏?」

「はい。」

「あなたは何をしているの?」

「ワールドカップを見ああ、愚かな!」

「@#$%^&*%...」

確かに、ワールドカップはまた、多くのACMerがテレビに向かって、コンピュータを脇に置くことが推定ファン祭に来ました。

ファンとして、私たちは完全なゲームの多くとして見たい、もちろん、良い若者の新しい時代として、あなたはまた、このようなニュースネットワークなど、いくつかの他のプログラム、(国事を心配することを決して忘れない)を見なければならない、6 + 7、スーパーでその上女の子、そして「幸せな辞書」の王小鴨と、すべてのテレビ番組の放送スケジュールを見るのが好きあなたはすでにあなたを知っていると仮定すると、あなたはそれを手配しますか?(目標は、完全なプログラムの多くとして確認することです)

入力

入力された試験例の複数を含むデータ、唯一の整数各テストケースの最初の行のN(N <= 100)、次の2つのデータTi_sを含む各行は、N行、のようなプログラムの総数を表しTi_e(1 <= I <= N)、問題、正の整数で各時間を簡単にするために、i番目の番組の開始時刻と終了時刻を表します。N = 0は処理せずに、入力終了を表します。

出力

各テストケースのために、出力の数は、完全なテレビ番組、別の行の各テストケースの出力を見ることができます。

各テストケースのために、出力の数は、完全なテレビ番組、別の行の各テストケースの出力を見ることができます。

サンプル入力

12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0

サンプル出力

5

#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <bitset>
#include <stack>
#include <queue>
#define inf 0X7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5 + 5;

struct N
{
	int begin;
	int end;
};

bool cmp(N x, N y)
{
	if (x.end == y.end)
		return true;
	return x.end < y.end;
}
N a[105];

int main()
{
	int n;
	scanf("%d", &n);
	while (n != 0)
	{
		int ans = 0;
		for (int i = 1; i <= n; i++)
			scanf("%d%d", &a[i].begin, &a[i].end);
		sort(a + 1, a + n + 1, cmp);
		int end = 0;
		for (int i = 1; i <= n; i++)
		{
			if (a[i].begin >= end)
			{
				ans++;
				end = a[i].end;
			}
		}
		printf("%d\n", ans);
		scanf("%d", &n);
	}
	return 0;
}

アイデア:
すべての入力期間の後、時間の終わりによれば、小から大へ。トラバーサルは、答えを更新し、現在の状況下での条件を満たすように最小期間が終了し、開始時間を見つけます。

公開された28元の記事 ウォンの賞賛0 ビュー343

おすすめ

転載: blog.csdn.net/xukeke12138/article/details/104522939