P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows

题目描述

约翰家有N头奶牛,第i头奶牛的编号是Si,每头奶牛的编号都是唯一的。这些奶牛最近 在闹脾气,为表达不满的情绪,她们在挤奶的时候一定要排成混乱的队伍。在一只混乱的队 伍中,相邻奶牛的编号之差均超过K。比如当K = 1时,1, 3, 5, 2, 6, 4就是一支混乱的队伍, 而1, 3, 6, 5, 2, 4不是,因为6和5只差1。请数一数,有多少种队形是混乱的呢?

状压Dp

见代码:

 #include<cstdio>
 #include<cstring>
 #include<algorithm>
 using namespace std;
 ];
 ][<<],ans;
 int main() {
     /*
         dp[i][j]在j状态中,队尾为第i头牛的方案数。
         考虑在对位后加入新牛。无后效性。
     */
     scanf(<<n;
     ;i<n;i++) scanf("%d",&a[i]);
     ;i<n;i++) dp[i][<<i]=;
     ;i<end;i++) {//枚举状态
         ;j<n;j++) <<j))//枚举以那头牛为队尾
         ;k<n;k++) <<k)) && abs(a[j]-a[k])>K)//枚举新添入哪头牛
         dp[k][i|(<<k)]+=dp[j][i];
     }
     ;i<n;i++) ans+=dp[i][end-];//全牛
     printf("%lld\n",ans);
     ;
 }

其实就是把搜索中的状态用很方便的形式保存了,以循环的形式实现

上一篇:JQuery------图片幻灯片插件


下一篇:傻瓜式十分钟免费开启 HTTPS,是时候为你的站点加上小绿锁了