不打算把题目放着,给个空间传送门,读者们自己去看,传送门(点我)    。

这题是自己做的第一道状态压缩的动态规划。

思路:

在这题中,我们设f[i]为i在二进制下表示的那些牛所用的最小电梯数。

设g[i]为i在二进制下表示的那些牛使用的电梯中剩下的最大容量。

所以很明显的,我们只要枚举每一只牛就可以了。

如果当前状态下,最大容量能装进某只牛,则装进去,并且用两个变量保存装进去后的f值与g值,否则再使用一个新的电梯,并且用变量保存用新电梯后的f与g值。

在每次的枚举,我们还要将当前保存的f值与g值与原来保存的状态值进行对比,取最小的,在这,如果当前枚举的f值与原来保存的f值相等,则我们更新g值,在两者间取最大的即可。

其中 i & (1 << j-1) 是判断第j只牛是否在状态i中,i | (1 << j-1) 表示将第j只牛装进去后的状态。

下面贴出代码,有问题下面留言

#include<cstdio>
#include<algorithm>
#define N 1<<20
using namespace std; int f[N],g[N],w[]; int main(){
int n,c;
scanf("%d%d",&n,&c);
for(int i = ; i <= n; i++)scanf("%d",&w[i]);
int mxx = ( << n)-;                //mxx为最终状态
for(int i = ; i <= mxx; i++)f[i] = ,g[i] = c;
f[] = ;
for(int i = ; i < mxx; i++){
for(int j = ; j <= n; j++)      //枚举每只牛
if(!(i&( << j-))){        //判断第j只牛是否在状态i中,不存在则进行计算
int nowf,nowg;      //当前f,g值
if(g[i] >= w[j]){      //如果原始最大剩余空间大于w[j]则说明可以将第j只牛装进去
nowg = g[i]-w[j];
nowf = f[i];
}
else nowg = c-w[j],nowf = f[i]+;    //否则新用一个电梯
if(nowf < f[i | ( << j-)]){      //取原值与现值中的最小值
f[i | ( << j-)] = nowf;
g[i | ( << j-)] = nowg;
}
else if(nowf == f[i | ( << j-)])g[i | ( << j-)] = max(nowg,g[i | ( << j-)]);  //当nowf 与 f[i | (1 << j-1)]相等时,要更新g值最大,取更大那个
}
}
if(g[mxx] < c)f[mxx]++;        //如果当前算得的最终状态剩下的容量小于c,则说明还需一个电梯
printf("%d\n",f[mxx]);
return ;
}

[USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper (状态压缩DP)的更多相关文章

  1. P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 状压dp

    这个状压dp其实很明显,n < 18写在前面了当然是状压.状态其实也很好想,但是有点问题,就是如何判断空间是否够大. 再单开一个g数组,存剩余空间就行了. 题干: 题目描述 A little k ...

  2. [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    洛谷题目链接:[USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 题目描述 A little known fact about Bessie and friends is ...

  3. 洛谷P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 题目描述 A little known fact about Bessie and friends is ...

  4. P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目描述 给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组.(n<=18) 输入格式: Line 1: N and W separated by a spa ...

  5. [USACO12MAR] 摩天大楼里的奶牛 Cows in a Skyscraper

    题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...

  6. 洛谷 P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...

  7. LUOGU P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...

  8. [bzoj2621] [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目链接 状压\(dp\) 根据套路,先设\(f[sta]\)为状态为\(sta\)时所用的最小分组数. 可以发现,这个状态不好转移,无法判断是否可以装下新的一个物品.于是再设一个状态\(g[sta] ...

  9. [luoguP3052] [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper(DP)

    传送门 输出被阉割了. 只输出最少分的组数即可. f 数组为结构体 f[S].cnt 表示集合 S 最少的分组数 f[S].v 表示集合 S 最少分组数下当前组所用的最少容量 f[S] = min(f ...

随机推荐

  1. JavaScript 事件代理绑定

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. MyBatis在注解上使用动态SQL(@select使用if)

    1.用script标签包围,然后像xml语法一样书写 @Select({"<script>", "SELECT * FROM tbl_order", ...

  3. [Cypress] Stub Network Requests in a Cypress Test

    To keep our tests fast and easily repeatable, it makes sense to create many integration tests and fe ...

  4. SPOJ 10628 Count on a tree (lca+主席树)

    题意:给定一棵有n个结点的树,每一个点有一个权值.共同拥有m个询问.对于每一个询问(u,v,k),回答结点u至v之间第k小的点的权值. 思路:主席树+lca.首先指定一个根结点dfs一次并在此过程中建 ...

  5. spring 源码解析

    1. [文件] spring源码.txt ~ 15B     下载(167) ? 1 springн┤┬вио╬Ш: 2. [文件] spring源码分析之AOP.txt ~ 15KB     下载( ...

  6. Linux学习(二) wget命令的使用

    近期在Linux下进行一些操作,在非常多地方都用到了wget这个命令,记录一下一些有关wget的使用方法: wget是在Linux下开发的开放源码的软件,作者是Hrvoje Niksic,后来被移植到 ...

  7. 几个比較好的IT站和开发库官网

    几个比較好的IT站和开发库官网 1.IT技术.项目类站点 (1)首推CodeProject,一个国外的IT站点,官网地址为:http://www.codeproject.com,这个站点为程序开发人员 ...

  8. 用BFS解决迷宫问题

    在一个n*n的矩阵里走,从原点(0,0)開始走到终点(n-1,n-1),仅仅能上下左右4个方向走.仅仅能在给定的矩阵里走,求最短步数. n*n是01矩阵,0代表该格子没有障碍.为1表示有障碍物. in ...

  9. 详解Google第二代TPU 既能推理又能训练 性能霸道

    详解Google第二代TPU 既能推理又能训练 性能霸道 转自:http://www.cnbeta.com/articles/tech/613639.htm 5月18日凌晨,Google CEO Su ...

  10. CodeForces--621A--Wet Shark and Odd and Even(数学水题)

    Wet Shark and Odd and Even Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & ...