#P15910. [Roi2020 Team]Cooking做饭

[Roi2020 Team]Cooking做饭

题目描述

Stephen 和 Sergey 上了大学并住在校园里。现在他们需要学会做饭。

他们已经学会做 n 种不同的菜。买完食材后,他们决定在下一次购物前,第 i 种菜恰好要做 aia_i 次。

每天 Sergey 和 Stephen 会选择两道菜 ij 来做,耗时为 ci,jc_{i,j}。可以有 i=ji=j,这表示当天同一道菜做两次。

他们很懒,所以希望在下一次购物前完成所有做饭计划的总耗时最小。请你帮助他们。

输入格式

第一行输入整数 n,表示菜的种类数。

1n101 \le n \le 10

第二行输入 n 个正整数:

a1,a2,,ana_1,a_2,\ldots,a_n

表示每种菜必须做的次数。

1ai501 \le a_i \le 50

接下来 n 行,每行 n 个整数。第 i 行第 j 个数为 ci,jc_{i,j},表示同一天做菜 i 和菜 j 所需时间。

1ci,j1001 \le c_{i,j} \le 100

保证 ci,j=cj,ic_{i,j}=c_{j,i}

输出格式

输出一个整数,表示最小总做饭时间。

如果无法制定计划,使得第 i 种菜恰好做 aia_i 次,则输出 -1

样例

样例 1

样例输入:

3
2 2 2
1 4 3
4 4 5
3 5 6

样例输出:

10

样例 2

样例输入:

2
2 39
23 9
9 23

样例输出:

-1

样例 3

样例输入:

1
2
100

样例输出:

100

样例说明

在第一个样例中,最优方案是做如下三天:

(1,3),(1,3),(2,2)(1,3),(1,3),(2,2)

总耗时为 3+3+4=103+3+4=10