1. 程式人生 > >[Luogu2915] [USACO08Nov,Gold] Mixed Up Cows [狀態壓縮][dp]

[Luogu2915] [USACO08Nov,Gold] Mixed Up Cows [狀態壓縮][dp]

[ L i n k \frak{Link} ]


如果這道題目的K≤9那就是一道數位dp
不過它的K≤3400N≤16
水狀壓。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<ctime>
#include<cstring>
using namespace std;
int n, K, s[25005];
long long F[20][65565];
int limit;
int main() {
	scanf("%d%d", &n,
&K); for (int i = 1; i <= n; ++i) { scanf("%d", &s[i]); } limit = (1<<n) - 1; for (int i = 1; i <= n; ++i) F[i][1<<i-1] = 1; for (int i = 1; i < limit; ++i) { for (int j = 1; j <= n; ++j) { if (!(i&1<<j-1)) continue; if (!F[j][i]) continue; for
(int k = 1; k <= n; ++k) { if (i&1<<k-1) continue; if (abs(s[k] - s[j]) <= K) continue; F[k][i|1<<k-1] += F[j][i]; } } } long long ans = 0; for (int i = 1; i <= n; ++i) ans += F[i][limit]; printf("%lld", ans); return 0; }