#P1275. Cashier Employment

Cashier Employment

描述

德黑兰的一家超市每天 24 小时营业,需要一定数量的收银员来满足运营需求。超市经理聘请你来帮他解决这个问题。问题在于,超市在一天的不同时间段需要不同数量的收银员(例如,午夜过后需要的收银员较少,而下午需要的较多),他希望以最少的收银员数量完成这项工作。

经理已经为你提供了一天中每个一小时时间段所需的最少收银员数量。这些数据表示为 R(0),R(1),,R(23)R(0), R(1), \cdots, R(23)R(0)R(0) 表示从午夜到凌晨 1 点所需的最少收银员数量,R(1)R(1) 表示从凌晨 1 点到凌晨 2 点的这一数量,依此类推。请注意,这些数量每天都是相同的。

NN 名符合条件的求职者应聘这份工作。每名求职者 ii 每天会在 24 小时内不间断工作一次,工作时长恰好为 8 小时,从指定的时间 tit_i0ti230 \leq t_i \leq 23)开始,精确到整点。也就是说,如果第 ii 名求职者被录用,他/她将从 tit_i 点整开始工作 8 小时。收银员不会相互替换,严格按照安排工作,并且有足够的收银机和柜台供被录用的人使用。

你需要编写一个程序,读取 i=023i = 0 \cdots 23 时的 R(i)R(i) 以及 i=1Ni = 1 \cdots N 时的 tit_i,这些都是非负整数,然后计算出满足上述条件所需雇佣的最少收银员数量。请注意,在某个特定时间段内,实际的收银员数量可能会超过所需的最少数量。

输入

输入的第一行是该问题的测试用例数量(最多 20 个)。每个测试用例的第一行包含 24 个整数,代表 R(0),R(1),,R(23)R(0), R(1), \cdots, R(23)R(i)R(i) 最大为 1000)。接着的一行是求职者数量 NN0N10000 \leq N \leq 1000),之后的 NN 行每行包含一个 tit_i0ti230 \leq t_i \leq 23)。测试用例之间没有空行。

输出

对于每个测试用例,应在一行中输出所需的最少收银员数量。 如果某个测试用例没有解决方案,则应输出 No Solution。

输入数据 1

1
1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
5
0
23
22
1
10

输出数据 1

1

来源

2000 年德黑兰竞赛题