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.
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
请按任意键继续. . .