题目描述
本题中,你需要解决一个著名的 NP 问题——二次整数规划问题。
二次整数规划问题要有变量:你需要给出一个长度为 n 的整数序列 (x1,x2,…,xn),满足下文中的所有条件。
二次整数规划问题要有约束:你给出的整数序列需要满足以下两类约束:
- 一类约束是单个变量取值的约束:给出正整数 k(3≤k≤5)和 n 个区间 [li,ri](1≤i≤n),其中 1≤li≤ri≤k,你给出的序列需要满足 ∀1≤i≤n,li≤xi≤ri;
- 另一类约束是变量之间取值的约束:给出 m 个三元组 (pi,qi,bi),你给出的序列需要满足 ∀1≤j≤m,∣xpj−xqj∣≤bj。
二次整数规划问题要有目标函数:在给出 k−2 个目标参数 v2,v3,…,vk−1(注意下标范围为 2 至 k−1)的前提下,对于一个值域为 [1,k] 的整数数列 {p1,p2,…,pn},设 ci 为该序列中取值为 i 的元素个数,G 为满足 1≤i,j≤n 且 ∣pi−pj∣≤1 的整数二元组 (i,j) 个数,注意当 i=j 时,(i,j) 与 (j,i) 是不同的二元组。定义该序列的权值为
$$W(p_1, p_2, \ldots, p_n) = 10^6 G+\sum_{i=2}^{k-1} c_i v_i \text{。}
$$
你的序列需要在满足以上两类约束的情况下,最大化其权值。在给出的约束下,保证存在满足约束的序列。
二次整数规划问题不一定要有多组询问,但是我们会给出 q 次询问,每次询问给出不同的权值参数 v2,v3,…,vk−1,对于每组询问你需要找到满足约束的最大化权值的序列。为了减少输出量,你只需要输出这个序列的权值。
输入格式
从文件 qip.in
中读入数据。
本题有多组测试数据。
第一行一个非负整数和一个正整数 C,T,分别表示测试点编号和测试数据数量。C=0 表示该组数据为样例。
对于每组测试数据,第一行四个整数 k,n,m,q,描述序列值域、序列长度、变量之间约束的个数和询问次数。
接下来 n 行每行两个整数 li,ri,描述序列中每个元素对应的取值区间。
接下来 m 行每行三个整数 pj,qj,bj,描述一个变量之间的约束。
接下来 q 行每行 k−2 个非负整数 v2,v3,…,vk−1 描述一组询问的权值参数。
输出格式
输出到文件 qip.out
中。
对于每组数据的每组询问输出一行一个整数,表示序列权值的最大值。
样例 1
见附件中的 qip/qip1.in
与 qip/qip1.ans
。
该样例满足数据范围中测试点 1 的性质。
第一个测试数据中两组询问对应的最优序列均为 (1,2,2,1,3),有 c2=2,G=21。
样例 2
见附件中的 qip/qip2.in
与 qip/qip2.ans
。
该样例满足数据范围中测试点 3 的性质。
第一个测试数据中两组询问对应的最优序列分别为 (4,4,3,3) 和 (4,3,2,2)。
样例 3
见附件中的 qip/qip3.in
与 qip/qip3.ans
。
该样例满足数据范围中测试点 5 的性质。
第一个测试数据中三组询问对应的一个最优序列分别为 (3,3,3,3,3)、(2,2,3,3,2) 和 (3,2,4,4,2)。
样例 4
见附件中的 qip/qip4.in
与 qip/qip4.ans
。
该样例满足数据范围中测试点 2 的性质。
样例 5
见附件中的 qip/qip5.in
与 qip/qip5.ans
。
该样例满足数据范围中测试点 4 的性质。
样例 6
见附件中的 qip/qip6.in
与 qip/qip6.ans
。
该样例满足数据范围中测试点 8 的性质。
样例 7
见附件中的 qip/qip7.in
与 qip/qip7.ans
。
该样例满足数据范围中测试点 14 的性质。
样例 8
见附件中的 qip/qip8.in
与 qip/qip8.ans
。
该样例满足数据范围中测试点 17 的性质。
数据范围与提示
设 ∑q 为单个测试点中所有测试数据的 q 的和。对于所有测试点,
- 1≤T≤600,
- 第 i(1≤i≤T)个测试数据中,1≤n≤max(iT,2log2T),
- 3≤k≤5,0≤m≤3n,1≤q,∑q≤3×105,
- 1≤li≤ri≤k,
- 1≤pj,qj≤n,0≤bj<k,
- 0≤v2,…,vk−1≤1012。
测试点编号 |
T≤ |
k= |
∑q≤ |
特殊性质 |
测试点分数 |
1 |
10 |
3 |
200 |
无 |
4 |
2 |
600 |
3×105 |
6 |
3 |
10 |
4 |
200 |
4 |
4 |
600 |
3×105 |
6 |
5 |
10 |
5 |
300 |
5 |
6 |
15 |
500 |
4 |
7 |
25 |
750 |
8 |
50 |
1000 |
6 |
9 |
80 |
1500 |
10 |
120 |
2000 |
5 |
11 |
200 |
8000 |
A |
3 |
12 |
400 |
3×104 |
4 |
13 |
600 |
2×105 |
5 |
14 |
200 |
8000 |
B |
3 |
15 |
400 |
3×104 |
4 |
16 |
600 |
2×105 |
17 |
120 |
105 |
C |
18 |
150 |
2×105 |
5 |
19 |
180 |
3×105 |
20 |
300 |
5×104 |
无 |
21 |
450 |
105 |
4 |
22 |
600 |
3×105 |
特殊性质 A:m=0。
特殊性质 B:m≤10,单个测试点中所有测试数据的 m 的和不超过 200。
特殊性质 C:数据随机生成。具体地,生成测试点中每组测试数据时,给出参数 k,n,m,q 以及 k 个非负常数 p0,p1,p2,…,pk−1,保证 pk−1=0,则按照如下规则生成该组数据:
- 对于 1≤i≤n,独立均匀生成 x,y∈[1,k],则 li=min(x,y),ri=max(x,y);
- 不断按照如下方式生成三元组直至有 m 个三元组:
- 独立均匀随机生成 u,v∈[1,n];
- 以 p 为权值随机生成 w(对于 0≤i≤k−1,w=i 的概率为 p0+p1+⋯+pk−1pi);
- 若在原有三元组集合中加入 (u,v,w) 后不存在序列 (x1,x2,…,xn) 满足所有限制,则舍弃当前三元组,否则加入当前三元组。
- 每组询问的 v2,…,vk−1 在 [0,1012] 内独立均匀随机生成。