Problema de disposición del lugar (algoritmo codicioso)

Problema de disposición del lugar (algoritmo codicioso)

1. Descripción del título
Suponga que un lote de actividades debe organizarse en suficientes lugares y espere utilizar el menor número posible de lugares. Diseñe un algoritmo codicioso eficaz para organizar. Para programar los k eventos dados, calcule el horario con el menor lugar.
Entrada
Hay un entero positivo k en la primera línea, lo que significa que hay k actividades para organizar. En las siguientes k filas, cada fila tiene 2 enteros positivos, que representan la hora de inicio y la hora de finalización de las k actividades que se programarán. El tiempo es en minutos a partir de las 0:00.
Salida Muestra
el número mínimo calculado de sitios de conferencias a.
Entrada de muestra Copia
5
1 23
12 28
25 35
27 80
36 50
Salida de muestra Copia
3

2. Análisis de caso En
este caso, se usa una estructura para definir un evento, el recuento representa el número de eventos, room_avail puede organizar el período de tiempo libre, room_num representa el número de lugares programados, el indicador se usa como etiqueta del evento y el indicador del evento programado se establece en 1. . A través del algoritmo codicioso, se selecciona la solución local óptima, es decir, se organizan suficientes actividades en el menor lugar, y cuando no se pueden organizar otras actividades en un lugar, se organizará en el siguiente lugar hasta que se organicen todas las actividades. Volver a la final El número de lugares donde están programados todos los eventos.

Inserte la descripción de la imagen aquí
Tres, código de caso

#include<iostream>
#include<cstdio>
using namespace std;

struct ans{   //定义结构体表示活动 
	int begin,end;
	bool flag; //设置标志 
};

int arrange(int k,ans *a)
{
int count=k,room_avail=0,room_num=0;
while(count>0)
  {
	for(int i=1;i<=k;i++)
	{
		if((a[i].begin>room_avail)&&(a[i].flag==0))  //如果当前活动未安排并且和会场已有活动不冲突 
		{
			room_avail=a[i].end;  //将当前活动加入该会场并更新会场的空闲时间
			a[i].flag=1;
			count--; 
		}
	}
	room_avail=0;  //将room_avail初始化
	room_num++;   //遍历一次,使用的会场数加一 
  } 
	return room_num; //返回安排的会场数 
	
}
int main()
{
int k,room_num;
cin>>k;
ans a[k+1];
for(int i=1;i<=k;i++)
{
	cin>>a[i].begin>>a[i].end;
	a[i].flag=0;
}

room_num=arrange(k,a) ;
cout<<room_num<<endl;
return 0;
}

Cuatro, resultados en ejecución

5
1 23
12 28
25 35
27 80
36 50
3

--------------------------------
Process exited after 1.365 seconds with return value 0
请按任意键继续. . .






Supongo que te gusta

Origin blog.csdn.net/weixin_43553142/article/details/103571130
Recomendado
Clasificación