天天看點

工程

Description

張三是某工程公司的項目工程師。一天公司接下一項大型工程,該公司在大型工程的施工前,先要把整個工程劃分為若幹個子工程,并把這些子工程編号為1、2、…、N;這樣劃分之後,子工程之間就會有一些依賴關系,即一些子工程必須在某些子工程完成之後才能施工,公司需要工程師張三計算整個工程最少的完成時間。

對于上面問題,可以假設:

1、根據預算,每一個子工程都有一個完成時間。

2、子工程之間的依賴關系是:部分子工程必須在一些子工程完成之後才開工。

3、隻要滿足子工程間的依賴關系,在任何時刻可以有任何多個子工程同時在施工,也即同時施工的子工程個數不受限制。

例如:有五個子工程的工程規劃表:

工程

現在對于給定的子工程規劃情況,及每個子工程完成所需的時間,如果子工程劃分合理則求出完成整個工程最少要用的時間,如果子工程劃分不合理,則輸出-1。

Input

第1行為正整數N,表示子工程的個數(N<=200)

第2行為N個正整數,分别代表子工程1、2、…、N的完成時間。

第3行到N+2行,每行有N-1個0或1,其中的第K+2行的這些0或1,分别表示“子工程K”與子工程1、2、…、K-1、K+1、…、N的依賴關系(K=1、2、…、N)。每行資料之間均用空格分開。

Output

如果子工程劃分合理則輸出完成整個工程最少要用的時間,如果子工程劃分不合理,則輸出-1。

Sample Input

project.in

5

5 4 12 7 2

0 0 0 0

1 1 0 0

1 1 1 1.

0 1 0 0

0 0 1 0

1 1 1 1

Sample Output

project.out

14

-1

.

分析

設a[i]表示第i個工程最少能在多少時間内完成

先從1到n枚舉,再調用子程式将目前工程的子工程總花費統計起來,最後輸出即可

①→②→③→①→Explotion!(本程式要完成,就要先完成箭頭指向的程式)在這裡前提條件與要做的工程重合,故成了死循環,程式會炸

程式: