#S0022. 驻点排班(roster)

驻点排班(roster)

题目描述

一场活动持续 nn 天,服务站从 11 开始编号。第 ii 天,只有编号为 1,2,…,ci1,2,\ldots,c_i 的服务站开放;若 ci=0c_i=0,则当天没有服务站开放。每个开放的服务站每天必须恰好安排一个小组值班,未开放的服务站不能安排值班。

共有 mm 个候选小组,你可以从中选用若干个。第 jj 个小组一旦被选用,就必须在同一个服务站连续值班恰好 djd_j 天,产生的总收益为 vjv_j。每个小组最多使用一次,值班日期必须全部位于活动的 nn 天内。

在满足所有值班要求的前提下,求最大总收益。若不存在可行安排,输出 00;若所有服务站始终关闭,总收益也为 00。

输入格式

第一行包含两个整数 n,mn,m,表示活动天数和候选小组数。

第二行包含 nn 个整数 c1,c2,…,cnc_1,c_2,\ldots,c_n,描述每天开放的服务站。

接下来 mm 行,第 jj 行包含两个整数 dj,vjd_j,v_j,表示第 jj 个小组的连续值班天数和总收益。

输出格式

输出一行一个整数,表示最大总收益;不存在可行安排时,输出 00。

样例输入 1

3 4
2 1 2
3 4
1 2
1 5
1 7

样例输出 1

16

样例 1 解释

让第 11 个小组在 11 号站连续值班 33 天;第 33、44 个小组分别在第 11、33 天到 22 号站值班。总收益为 4+5+7=164+5+7=16,这是最大值。

样例输入 2

2 1
1 1
1 8

样例输出 2

0

样例 2 解释

唯一的小组只能值班 11 天,无法覆盖 11 号站连续开放的两天,因此不存在可行安排,输出 00。

数据范围与子任务

对于所有测试数据,保证1≤n≤1051\le n\le10^5,1≤m≤161\le m\le16,0≤ci≤1050\le c_i\le10^5,1≤dj≤n1\le d_j\le n,0≤vj≤1060\le v_j\le10^6。

每个子任务内的正式测试全部通过,才获得该子任务的分数。

子任务编号 分值 额外限制
1 20 n,m≤8n,m\le8
2 ci≤1c_i\le1
3 n≤100n\le100,ci≤100c_i\le100
4 40 无额外限制