Diciamo che ci sono dati N lavori e K lavoratori per fare quei lavori. Ma per alcuni posti di lavoro abbiamo bisogno di 2 dipendenti, mentre per alcuni abbiamo bisogno di uno solo. Anche i dipendenti non possono fare tutti i lavori. Ad esempio, il lavoratore 1 può eseguire lavori 1,2 e 5, mentre non lavori 3 e 4. Inoltre, se assumiamo 1 lavoratore per svolgere il lavoro 1, vogliamo che faccia lavori 2 e 5, poiché l'abbiamo già pagato.Algoritmo ungherese con assegnazioni multiple
Quindi per esempio diciamo che abbiamo 5 posti di lavoro e 6 lavoratori. Per i posti di lavoro 1,2 e 4 abbiamo bisogno di 2 uomini, mentre per i lavori 3 e 5 ne abbiamo bisogno solo uno. Ed ecco l'elenco dei lavori che ogni lavoratore può fare e il salario che richiede.
Worker 1 can do jobs 1,3,5 and he requires 1000 dollars.
Worker 2 can do jobs 1,5 and he requires 2000 dollars.
Worker 3 can do jobs 1,2 and he requires 1500 dollars.
Worker 4 can do jobs 2,4 and he requires 2500 dollars.
Worker 5 can do jobs 4,5 and he requires 1500 dollars.
Worker 6 can do jobs 3,5 and he requires 1000 dollars.
Dopo piccolo calcolo e il pensiero logico possiamo concludere che dobbiamo assumere lavoratori 1,3,4 e 5, il che significa che il salario minimo che dobbiamo pagare è: 1000 + 1500 + 2500 + 1500 = 5500 dollari.
Ma come possiamo trovare un algoritmo efficiente che produrrà tale importo? Questo mi ricorda in qualche modo l'Algoritmo Ungherese, ma tutti questi vincoli aggiuntivi mi impediscono di applicarlo.
Hai davvero bisogno di risolvere questo problema? Sembra un problema di compiti a casa e stai cercando di eseguire un'ottimizzazione complessa. Se è così, fallo in modo lento/semplice e consegnalo. Sospetto che questa discussione sia complessa e/o dispendiosa in termini di tempo. –
@MooingDuck Non è un problema di compiti a casa, è una domanda del passato. – Stefan4024
"Anche se assumiamo un lavoratore 1 per fare il lavoro 1, allora vogliamo che faccia i lavori 2 e 5, dal momento che lo abbiamo già pagato." Non lo pagherai separatamente per ogni lavoro? O stai dicendo che farà tutti e tre i lavori per $ 1000? – Yay295