semana 3 - seleção de ponto com intervalo B

Título:

Existem n intervalos fechados [a_i, b_i] na linha numérica. Pegue o mínimo de pontos possível para que haja pelo menos um ponto em cada intervalo (os pontos contidos em diferentes intervalos podem ser os mesmos)

Entrada:

1 número inteiro N na primeira linha (N <= 100)
Linha 2 ~ N + 1, dois números inteiros a, b em cada linha (a, b <= 100)

Resultado:

Um número inteiro representando o número de pontos selecionados

Exemplos:

Entrada

2
1 5
4 6

Resultado

1

Entrada

3
1 3
2 5
4 6

Resultado

2

Idéias:

A estratégia gananciosa para esta pergunta é: selecione o último ponto do intervalo. Classifique todos os intervalos por final, de pequeno a grande, e quando final for o mesmo, classifique por grande a pequeno.
Prova:
1. Quando o intervalo contém, se houver um ponto na célula, deve haver um ponto no intervalo grande; portanto, devemos preferir selecionar o ponto na célula, para que o intervalo grande não precise de pontos. Se o intervalo contiver a situação, as células vizinhas serão selecionadas preferencialmente ao atravessar de acordo com este método de classificação.Neste caso, a estratégia gananciosa está correta.
2. Quando os pontos iniciais dos intervalos são organizados em ordem crescente, o último ponto no intervalo de seleção pode obviamente incluir mais intervalos.Neste caso, a estratégia gananciosa também está correta.

Código:

#include <iostream>
#include <algorithm>

using namespace std;

struct zone
{
	int be;
	int end;
};

bool cmp(zone a, zone b)
{
	if (a.end == b.end)
		return a.be > b.be;
	return a.end < b.end;
}

int main()
{
	int be, end, n, count;
	while (scanf("%d",&n)!=EOF)
	{
		count = 1;
		zone *temp = new zone[n];
		for (int i = 0; i < n; i++)
		{
			cin >> be >> end;
			temp[i].be = be;
			temp[i].end = end;
		}
		sort(temp,temp+n,cmp);
		int j = 0;
		for (int i = 1; i < n; i++)
		{
			if (temp[i].be > temp[j].end)
			{
				j = i;
				count++;
			}
		}
		cout << count << endl;
	}
	return 0;
}


Publicado 32 artigos originais · elogiado 0 · visitas 695

Acho que você gosta

Origin blog.csdn.net/qq_43814559/article/details/104722851
Recomendado
Clasificación