bzoj1231[USACO 2008 Nov]Mixed Up Cows混乱的奶牛

mac2022-06-30  24

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1231

题目大意:

题解:

状压DP

设f[i][j]表示选择了j的奶牛(j为二进制数表示已经选择奶牛的状态)的这条队伍末尾为i。

那么转移的时候只要看看接下来选的这只牛跟之前队尾的牛满不满足条件。

方程很好写,就懒得贴了

#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; LL s[20],f[20][1<<17]; int main() { int n,kk,i,j,k,mx;LL ans; scanf("%d%d",&n,&kk); for (i=1;i<=n;i++) scanf("%I64d",&s[i]); mx=(1<<n)-1;ans=0; memset(f,0,sizeof(f)); for (i=1;i<=n;i++) f[i][1<<i-1]=1; for (i=0;i<mx;i++) for (j=1;j<=n;j++) if (!((1<<j-1)&i)) for (k=1;k<=n;k++) if ((1<<k-1)&i && abs(s[k]-s[j])>kk) f[j][i|(1<<j-1)]+=f[k][i]; for (i=1;i<=n;i++) ans+=f[i][mx]; printf("%I64d\n",ans); return 0; }

转载于:https://www.cnblogs.com/Euryale-Rose/p/6527848.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)