题目描述
给出一个长度为 n 的序列 a。定义其前缀和数组 bi=∑j=1iaj。定义其权值 S=∑i=1n(bimod2)。
你可以对序列 a 进行若干次如下操作:
- 交换 ai,aj,花费 ci+cj 元,其中 c 为给定序列;
对于 i=0∼n,求使得 S=i 的最少钱数。如果不可能,输出 −1。
输入格式
本题包含多组测试数据。
第一行一个正整数 T,表示测试数据组数。
对于每组测试数据:
第一行一个正整数 n,表示序列长度。
第二行 n 个正整数,表示序列 a。
第三行 n 个正整数,表示序列 c。
输出格式
对于每组测试数据:
一行,n+1 个整数,第 i 个表示 S=i−1 的最少钱数。如果不可能,输出 −1。
样例
3
3
1 2 3
1 1 1
5
1 2 3 4 5
2 5 3 6 4
10
1 8 3 5 2 6 3 4 6 2
3 2 7 1 8 2 5 8 3 1
-1 2 0 -1
-1 -1 7 0 9 -1
-1 -1 5 3 4 0 7 8 6 -1 -1
样例解释
对于第一组数据,初始 ∑i=1n(bimod2)=2,故使 S=2 最少要花 0 元。
交换 a1,a2 即可使 ∑i=1n(bimod2)=1,故使 S=1 可以花费 2 元。可以证明这是最优解。
可以证明不存在交换方案使得 S=0 或 S=3。
数据范围
本题采用捆绑测试。
子任务编号 |
分值 |
n≤ |
∑n≤ |
特殊性质 |
1 |
10 |
5 |
50 |
无 |
2 |
500 |
a 中至多有 3 个奇数 |
3 |
15 |
30 |
150 |
无 |
4 |
25 |
100 |
500 |
5 |
10 |
500 |
ci=1 |
6 |
30 |
无 |
对于 100% 的数据:1≤n,∑n≤500,1≤ai≤109,1≤ci≤106,1≤T≤500。