- 题意
$N ( 1 \le N \le 16 ) $头奶牛,每头奶牛有一个权值$S_i ( 1 \le S_i \le 25000 ) $,求有多少排列,满足相邻的两个奶牛权值的差均超过$K ( 1 \le K \le 3400 ) $。
- Solution
- $N$范围不大,容易想到可以用状压DP做。
- 有一个自己不太会的小技巧:DP时计算当前状态对其他状态的贡献,在有些题上很方便,而不是一味的用其他状态计算当前。
- 设$f[x][i]$代表当前队伍中奶牛的存在情况为$i$,排在最后一个的是$x$时的方案数。
- 不难发现有$ f[k][i|1<<(k-1)] += f[x][i], k \notin {i} $
- 最后统计一下答案就行了
|
|