DP专题测试1 2019年5月1日
天平(balance.in/balance.out)
物理老师 YJ 有一个长杆天平,天平的两臂长均为 15,将长杆看作 x 轴, 则平衡点在 0 位置处,负数位置在左臂上,正数位置在右臂上。长杆上有 n 个 位置有挂钩可以挂秤砣。YJ 有 m 个秤砣,质量分别为 gi,每个挂钩可以不挂也 可以挂任意个秤砣。YJ 想要知道,在使用所有秤砣的条件下,有多少种不同的 挂秤砣的方案,可以使得天平平衡?问题太过复杂,仅凭物理知识难以解决, 所以请你来帮助他。 天平的平衡条件是所有秤砣的位置*质量之和为 0。例如有质量为 2,3,4 的 秤砣分别挂在-3,-2,3 位置处,则 2*(-3) + 3*(-2) + 4*3 == 0,天平是平衡 的。
【输入格式】
第一行两个数 n,m。表示挂钩的数目和秤砣的数目。 第二行 n 个不同且递增的数,第 i 个数表示第 i 个挂钩的位置,数的范围 在[-15,15]内。 第三行 m 个不同且递增的数,第 i 个数表示第 i 个秤砣的质量,数的范围 在[1,25]内。
【输出格式】 一个整数,代表能使得天平平衡的方案数。
【输入样例】 2 4
-2 3
3 4 5 8
【输出样例】 2
【样例解释】 方案 1: (-2)*(3+4+5) + 3*8 = 0 方案 2: (-2)*(4+8) + 3*(3+5) = 0
【数据规模】 10% 数据满足 2≤n,m≤4。
100% 数据满足 2≤n,m≤20。
3
山峰数(hill.in/hill.out)
山峰数是指数字排列中不存在山谷(先降后升)的数,例如 0,5,13,12321 都 是山峰数,101,1110000111 都不是山峰数。 现给出 n 个数,请依次判断它们是否为山峰数,如果不是,输出-1。如果 是,求出比它小的数中有多少个山峰数。
【输入格式】
第一行一个数 n,表示询问数目。 接下来 n 行,每一行一个数 x,表示询问的数。
【输出格式】 输出有 n 行,x 如果不是山峰数,输出-1。x 如果是山峰数,则输出有多少 个比它小的山峰数。
【输入样例】 5
10
55
101
1000
1234321
【输出样例】 10
55
-1
715
94708
【数据规模】 20% 数据满足 x ≤ 1e6。
100% 数据满足 n ≤ 10, x ≤ 1e60
4
粉刷匠 2(draw.in/draw.out)
有一个 4*N 的木板需要粉刷,第 i 行 j 列的颜色记为 A(i, j)。 有 256 种颜色,记为 0..255,为了使得粉刷比较好看,粉刷需要满足如下 要求: 1. A(x,y) >= A(x,y-1) 2. 有一些指定的(x1, y1)和(x2, y2),要求 A(x1, y1) = A(x2, y2) 请问有多少种满足要求的粉刷方式?输出答案的最后 5 位即可。
【输入格式】 第一行两个数 n, m,表示木板的长度,和指定规则的条目个数。 接下来 m 行,每行四个数 x1,y1,x2,y1,此规则表示 A(x1, y1) 需要等于 A(x2, y2) 。 【输出格式】 一个整数,表示答案的末 5 位。
【输入样例 1】 1 0
【输出样例 1】 67296
【输入样例 2】 1 3
1 1 2 1
1 1 3 1
4 1 3 1
【输出样例 2】 00256
【提示】 输出可以使用%05d 输出。
【数据规模】 30% 数据满足 n ≤ 3,m = 0
100% 数据满足 1 ≤ n ≤ 15,0 ≤ M ≤ 100,X1,X2≤4,Y1,Y2≤n
5
棋盘(knight.in/knight.out)
有一个 N*M 的棋盘,要在上面摆上 knight,每个格子可以放至多一个 knight。
knight 的攻击范围如下图:
所有 knight 不能互相攻击,请问总共有多少可行的摆法?答案对 1000000007 取模。
【输入格式】 第一行个数 t,表示测试的组数。 接下来 t 组,每组两个整数,n 和 m。
【输出格式】 一共 t 行,第 i 行表示第 i 组的答案。
【输入样例】 4
1 2
2 2
3 2
3 31415926
【输出样例】 4
16
36
933912086
【数据规模】 70% 数据满足 m≤100。
100% 数据满足 t≤10, n≤3, m≤109。