传送门

状压dp好题啊。

可以发现这道题的状压只用压缩5位。

f[i][j]表示当前在第i个位置状态为j的最优值。

显然可以由f[i-1]更新过来。

因此只用预处理在第i个位置状态为j时有多少个小朋友高兴就行了。

代码:

  1. #include<bits/stdc++.h>
  2. #define N 50005
  3. using namespace std;
  4. int n,c,f[N][35],cal[N][35],las,ans=0;
  5. inline int read(){
  6. int ans=0;
  7. char ch=getchar();
  8. while(!isdigit(ch))ch=getchar();
  9. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  10. return ans;
  11. }
  12. inline int max(int a,int b){return a>b?a:b;}
  13. int main(){
  14. n=read(),c=read();
  15. for(int i=1;i<=c;++i){
  16. int a=read(),b=read(),c=read(),tmp1=0,tmp2=0;
  17. for(int j=1;j<=b;++j)tmp1|=1<<((read()-a+n)%n);
  18. for(int j=1;j<=c;++j)tmp2|=1<<((read()-a+n)%n);
  19. for(int j=0;j<32;++j)if((j&tmp1)||(~j&tmp2))++cal[a][j];
  20. }
  21. las=15;
  22. for(int j=0;j<32;++j){
  23. memset(f[0],-0x3f,sizeof(f[0]));
  24. f[0][j]=0;
  25. for(int i=1;i<=n;++i)for(int k=0;k<32;++k)
  26. f[i][k]=max(f[i-1][(k&15)<<1],f[i-1][(k&15)<<1|1])+cal[i][k];
  27. ans=max(ans,f[n][j]);
  28. }
  29. cout<<ans;
  30. return 0;
  31. }

2018.09.08 bzoj1151: [CTSC2007]动物园zoo(状压dp)的更多相关文章

  1. 2018.09.08 poj1185 炮兵阵地(状压dp)

    传送门 状压dp经典题. 我们把每一行的状态压成01串. 预处理出每一行可能出现的状态,然后转移每个被压缩的状态的1的个数就行了. 注意当前行转移要考虑前两行的状态. 还要注意只有一行的情况. 代码: ...

  2. 2018.09.08 NOIP模拟 division(状压dp)

    这么sb的题考场居然写挂了2233. 假设n=∏iaiki" role="presentation" style="position: relative;&qu ...

  3. [bzoj1151][CTSC2007]动物园zoo_状压dp

    动物园zoo 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=1151 题解: 我们发现每个点只会往右延伸$5$个,这个数非常小. 再加上每 ...

  4. 【[APIO/CTSC2007]动物园】状压DP

    题目测评:https://www.luogu.org/problemnew/show/P3622 题目描述 新建的圆形动物园是亚太地区的骄傲.圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围 ...

  5. 2018.09.22 牧场的安排(状压dp)

    描述 农民 John 购买了一处肥沃的矩形牧场,分成M*N(1 <= M <= 12; 1 <= N <= 12)个 格子.他想在那里的一些格子中种植美味的玉米.遗憾的是,有些 ...

  6. [BZOJ1151][CTSC2007]动物园zoo 解题报告|DP|位运算

    Description 最近一直在为了学习算法而做题,这道题是初一小神犇让我看的.感觉挺不错于是写了写. 这道题如果是一条线的话我们可以构造一个DP f[i,j]表示以i为起点,i,i+1...i+4 ...

  7. 2018.10.17 NOIP模拟 管道(状压dp)

    传送门 状压dp好题. 怎么今天道道题都有点东西啊 对于今天题目神仙出题人先膜为上策:%%%%DzYoAk_UoI%%%% 设f[i][j]f[i][j]f[i][j]表示选取点的状态集合为iii,当 ...

  8. noi省选 [九省联考2018]一双木棋题解(状压dp)

    比浙江简单多了........ 题目转送:https://www.luogu.org/problemnew/show/P4363 分析: 我们注意到n和m都很小,考虑一下状压dp. 显然,棋子摆成的形 ...

  9. 洛谷P4363 [九省联考2018]一双木棋chess 【状压dp】

    题目 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以落子当且仅当这个 ...

随机推荐

  1. select(下拉标签和textarea(文本框)

    Title 北京 南京 天津 武汉 石家庄 太原 dsadasd   <!DOCTYPE html> <html lang="en"> <head&g ...

  2. as3 判断移动方向

    var oldX:Number; stage.addEventListener(MouseEvent.MOUSE_DOWN,downF); stage.addEventListener(MouseEv ...

  3. install命令

    install 1.作用 install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户. 2.格式 (1)install [选项]... 来源 目的地 (2)install [选项].. ...

  4. 【转】oracle 体系结构

    前几天面试的时候面试官才问过我Oracle的体系结构,让我在一张白纸上画出来.回头想想当时答得还不错,大部分内容都描述出来了,呵呵,刚才在网上看到一篇讲解ORACLE体系结构的文章,觉得不错,转过来存 ...

  5. Haskell语言学习笔记(64)Lens(4)

    安装 lens-tutorial Control.Lens.Tutorial $ cabal install lens-tutorial Installed lens-tutorial-1.0.3 P ...

  6. 逻辑斯蒂回归VS决策树VS随机森林

    LR 与SVM 不同 1.logistic regression适合需要得到一个分类概率的场景,SVM则没有分类概率 2.LR其实同样可以使用kernel,但是LR没有support vector在计 ...

  7. do{}while() ;异常语句

    //while (true) //只要括号里面是true(正确的如:(1==1)),就会无限循环 //{ //} //do{}while() //不管while满足与否,首先先做一遍 //然后去看wh ...

  8. python 形参

    def fun(x="dx",y="dy"): print "fun------" print x print y fun()fun(&qu ...

  9. angluarjs ng-repeat 行号

    参考 https://zhidao.baidu.com/question/1882914672116911828.html $index

  10. IE8兼容background-size

    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/web/images/bg.png',sizingMethod='sca ...