Nanoroboty shromažďují vzorky
Zadání
Pokusné obdélníkové pole je rozděleno do M × N čtvercových sektorů.
V každém sektoru je umístěno několik vzorků. Pokusné nanoroboty, které mají za úkol vzorky shromažďovat, pracují v poli podle pravidel uvedených dále.
Každý nanorobot má určen startovní a koncový sektor. Koncový sektor vždy leží buď ve stejném řádku nebo ve stejném sloupci jako startovní sektor.
Úkolem nanorobota je projít všemi sektory na přímé dráze ze startovního do koncového sektoru a shromaždit všechny vzorky ve všech navštívených sektorech. Když nanorobot shromáždí vzorky ve svém cílovém sektoru, zastaví se a nepokračuje v žádné činnosti. Je zaručeno, že jakmile nanorobot začne pracovat v určitém sektoru, shromáždí v něm všechny vzorky.
Činnost kteréhokoli nanorobota v kterémkoli sektoru kontaminuje prostředí sektoru natolik, že když do sektoru navštíveného dříve jedním nanorobotem vstoupí další nanorobot, ztrácí tento druhý nanorobot orientaci, zastaví se a už nepokračuje v pohybu a shromažďování dalších vzorků.
Nanoroboty jsou do svých startovních sektorů umisťovány jeden po druhém.
Další nanorobot je do svého startovního sektoru umístěn až poté, co se předchozí nanorobot zastaví. Nezáleží přitom, zda se předchozí nanorobot zastavil po shromáždění vzorků ve svém koncovém sektoru nebo po vstupu do některého kontaminovaného sektoru. Pokud nanorobot kontaminuje svou činností startovní pole jiného nanorobota, který bude umístěn do pole později, nevykoná tento další nanorobot již žádnou činnost a neshromáždí žádné vzorky.
Experimentátoři chtějí nanoroboty do pole umisťovat v takovém pořadí, aby maximalizovali celkový počet vzorků shromážděných všemi nanoroboty.
Úloha
Je znám počet vzorků v každém sektoru pole a je znám startovní a koncový sektor každého robota. Určete maximální možný celkový počet vzorků, které mohou nanoroboty shromáždit, pokud budou do pole umisťovány ve vhodném pořadí.
Vstup
První řádek vstupu obsahuje dvě celá čísla M, N oddělená mezerou a určující počet sektorů podél vertikální a horizontální hrany pole.
Předpokládáme, že souřadnice jednotlivých sektorů jsou určeny jejich vertikání a horizontální vzdáleností (v tomto pořadí) od sektoru v levém horním rohu pole, který má souřadnice (0, 0).
Následuje M řádků, každý s N hodnotami, určujícími počet vzorků v jednotlivých sektorech. Pokud bychom tyto řádky vstupu indexovali od 0 a hodnoty na každém řádku indexovali rovněž od 0, pak by j-tá hodnota v i-tém řádku představovala počet vzorků v sektoru se souřadnicemi (i, j).
Dále je na vstupu řádek s jediným číslem R představujícím počet nanorobotů. Následuje R řádků, každý obsahuje čtyři čísla a, b, c, d oddělená mezerou a popisující startovní a cílový sektor jednoho z nanorobotů. Startovní sektor má souřadnice (a, b), cílový sektor má souřadnice (c, d), kde a = c nebo b = d.
Platí 2 ≤ M, N ≤ 50, 2 ≤ R ≤ 10, počet vzorků v jednom sektoru je nejvýše 1000.
Příklady
Příklad 1
6 6
1 1 1 9 1 1
3 5 2 1 2 1
1 1 1 9 1 1
1 1 1 2 1 1
1 9 3 1 3 1
1 1 1 9 1 1
4
4 4 4 1
1 5 1 0
5 1 1 1
5 3 0 3
54
Schémata ilustrující situaci a řešení Příkladu 1 jsou znázorněna na Obrázku 1.