[Luogu2915] [USACO08Nov,Gold] Mixed Up Cows [狀態壓縮][dp]
阿新 • • 發佈:2018-10-31
如果這道題目的K≤9那就是一道數位dp了
不過它的K≤3400,N≤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;
}