Coding is the closest thing we have to superpower !

3862 : 状压dp-练习-数字重排
描述

有n个整数排成一排,有一些数字被固定在某些位置,另外的一些可以自由交换。超能侠想要使所有相邻两数乘积的和最大,请你帮帮他。

输入

第一行输入一个整数 (1 \le n \le 16)

接下来n行,每行给出两个整数a_i(−10^4 \le a_i \le 10^4)、p_i(-1 \le p_i \lt n),以空格分割。

a_i表示数字的值,p_i​为该数字指定的位置,如果p_i = −1,代表该数字的位置不被限制。输入保证不会为两个数字指定相同的位置。

输出

数字重新排列后最大的所有相邻两数乘积的和,即\max \{a_1*a_2+a_2*a_3+......+a_{n−1} * a_n \}

样例

输入

6
-1 0
2 1
-3 2
4 3
-5 4
6 5

输出

-70

输入

5
40 -1
50 -1
30 -1
20 -1
10 -1

输出

4600
标签
语言:
主题: