PO-arkivering | 프로그래밍의 벗 PivotOJ
PivotOJ

PO-arkivering

시간 제한: 1000ms메모리 제한: 1024MB출처: Programmeringsolympiaden 2017 — kattBOJ 20897

문제

Efter varje tävling arkiverar Programmeringsolympiaden deltagarnas lösningar i all oändlighet. De flesta lösningarna som skickas in under en tävling är dock ganska lika. En tävlande som fixar en bugg kanske bara ändrar en enstaka rad i en lösning. I dessa fall är det onödigt att spara ner både den ursprungliga lösningen och den förändrade lösningen. Istället kan vi sparar ner den ena av lösningarna samt vilka ändringar som gjordes mellan de två lösningarna. Detta kan även ske i flera steg, så att man sparar ner en lösning AA, sedan sparar ändringarna mellan AA och en annan lösning BB, och slutligen ändringarna mellan BB och en tredje lösning CC.

Totalt skickades NN lösningar in under en tävling, med storlekarna S[0],S[1],,S[N1]S[0], S[1], \dots, S[N-1] bytes. Om den ii:te lösningen antingen är nedsparad eller kan återkonstrueras, så kan den jj:te lösningen återkonstrueras om ändringarna som är D[i][j]D[i][j] bytes stora sparas ned.

I de flesta testfallgrupper kommer diffstorlekarna att vara symmetriska, d.v.s. D[i][j]=D[j][i]D[i][j] = D[j][i] (i likhet med vanliga Unix-diff-filer). För den sista gruppen betraktar vi dock mer allmäna diffar där detta inte behöver stämma. T.ex. kan vi tänka oss att differensen mellan strängarna abaabbaaa och aaaaaa sparas som "ta bort alla b" i ena riktningen, och "sätt in b på positionerna 2, 5, 6" i den andra, där den senare ändringen kräver mer plats att spara ner än den första.

Vad är den minimala mängden data (i bytes) som måste sparas ned för att samtliga lösningar ska kunna återkonstrueras?

입력

Den första raden innehåller heltalet 1N1001 \le N \le 100. Nästa rad innehåller de NN heltalen 1S[0],S[1],,S[N1]10000001 \le S[0], S[1], \dots, S[N-1] \le 1\,000\,000. De nästa NN raderna innehåller NN heltal vardera. Den ii:te av dessa rader innehåller talen 1D[i][0],D[i][1],,D[i][N1]10000001 \le D[i][0], D[i][1], \dots, D[i][N-1] \le 1\,000\,000. D[i][i]=0D[i][i] = 0 för alla ii.

출력

Skriv ut ett enda tal -- den minimala mängden data som måste sparas ned i bytes.

예제

예제 1

입력
3
20 10 30
0 35 15
35 0 45
15 45 0
출력
45

예제 2

입력
3
100 101 102
0 5 2
30 0 1
40 50 0
출력
106
코드를 제출하려면 로그인하세요.