A93156.「NOI2022」二次整数规划问题
NOI/NOI+/CTSC
通过率:0%
时间限制:2.00s
内存限制:1024MB
题目描述
本题中,你需要解决一个著名的 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(p1,p2,…,pn)=106G+i=2∑k−1civi。
你的序列需要在满足以上两类约束的情况下,最大化其权值。在给出的约束下,保证存在满足约束的序列。
二次整数规划问题不一定要有多组询问,但是我们会给出 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 中。
对于每组数据的每组询问输出一行一个整数,表示序列权值的最大值。
说明/提示
设 ∑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 | 3×105 | 无 | 6 |
| 3 | 10 | 4 | 200 | 无 | 4 |
| 4 | 600 | 4 | 3×105 | 无 | 6 |
| 5 | 10 | 5 | 300 | 无 | 5 |
| 6 | 15 | 5 | 500 | 无 | 4 |
| 7 | 25 | 5 | 750 | 无 | 4 |
| 8 | 50 | 5 | 1000 | 无 | 6 |
| 9 | 80 | 5 | 1500 | 无 | 6 |
| 10 | 120 | 5 | 2000 | 无 | 5 |
| 11 | 200 | 5 | 8000 | A | 3 |
| 12 | 400 | 5 | 3×104 | A | 4 |
| 13 | 600 | 5 | 2×105 | A | 5 |
| 14 | 200 | 5 | 8000 | B | 3 |
| 15 | 400 | 5 | 3×104 | B | 4 |
| 16 | 600 | 5 | 2×105 | B | 4 |
| 17 | 120 | 5 | 105 | C | 4 |
| 18 | 150 | 5 | 2×105 | C | 5 |
| 19 | 180 | 5 | 3×105 | C | 5 |
| 20 | 300 | 5 | 5×104 | 无 | 5 |
| 21 | 450 | 5 | 105 | 无 | 4 |
| 22 | 600 | 5 | 3×105 | 无 | 4 |
特殊性质 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] 内独立均匀随机生成。