假设有 n 根蜡烛从左到右对齐。从左侧开始的第 i 根蜡烛的高度为 h[i],颜色为 c[i]。我们还有一个整数 k,表示有 1 到 k 范围内的颜色。我们必须找出有多少个严格递增的彩色糖果序列?根据高度检查递增序列,如果在 1 到 K 范围内至少有一种每种颜色的蜡烛可用,则称该序列是彩色的。如果答案太大,则返回结果 mod 10^9 + 7。
所以,如果输入像 K = 3 h = [1,3,2,4] c = [1,2,2,3],那么输出将为 2,因为它有序列 [1,2,4]和 [1,3,4]。
让我们看看以下实现以获得更好的理解 -
def solve(k, h, c): def read(T, i): s = 0 while i > 0: s += T[i] s %= 1000000007 i -= (i & -i) return s def update(T, i, v): while i <= 50010: T[i] += v T[i] %= 1000000007 i += (i & -i) return v def number_of_bits(b): c = 0 while b: b &= b - 1 c += 1 return c L = 2 ** k R = 0 N = len(h) for i in range(L): T = [0 for _ in range(50010)] t = 0 for j in range(N): if (i >> (c[j] - 1)) & 1: t += update(T, h[j], read(T, h[j] - 1) + 1) t %= 1000000007 if number_of_bits(i) % 2 == k % 2: R += t R %= 1000000007 else: R += 1000000007 - t R %= 1000000007 return R k = 3 h = [1,3,2,4] c = [1,2,2,3] print(solve(k, h, c))
3, [1,3,2,4], [1,2,2,3]输出结果
2