把数组竖起来,从上往下走。

如果当前位置是竖着乘的,那么第一个点标记为1.否则标记为0.

样例最终的状态为:

0 0 1

0 1 0

1 0 0

0 0 0

  1. #include<iostream>
  2. #include<cmath>
  3. #include<algorithm>
  4. #include<stdio.h>
  5. #include<string.h>
  6. #define max(a,b) ((a)>(b)?(a):(b))
  7. using namespace std;
  8. int maps[1010][11];
  9. int dp[1010][11];
  10. int pan(int x,int y)
  11. {
  12. int i;
  13. for(i=0;i<3;i++)
  14. {
  15. int tt=(1<<i);
  16. if((x&tt)&&(y&tt))return 0;
  17. }
  18. return 1;
  19. }
  20. int add(int x,int y,int z)
  21. {
  22. int ans=0;
  23. int ss[4];
  24. int i;
  25. for(i=0;i<3;i++)
  26. {
  27. if(x&(1<<i))ss[i+1]=1;
  28. else ss[i+1]=0;
  29. }
  30. for(i=0;i<3;i++)
  31. {
  32. if(y&(1<<i))
  33. {
  34. ans+=maps[z-1][i+1]*maps[z][i+1];
  35. ss[i+1]=1;
  36. }
  37. }
  38. int t1,t2;
  39. t1=t2=0;
  40. if(ss[1]==0&&ss[2]==0)t1=maps[z][1]*maps[z][2];
  41. if(ss[2]==0&&ss[3]==0)t2=maps[z][2]*maps[z][3];
  42. ans+=max(t1,t2);
  43. return ans;
  44. }
  45. int main()
  46. {
  47. int i,j,k,n;
  48. int cas=0;
  49. while(~scanf("%d",&n)&n)
  50. {
  51. cas++;
  52. memset(maps,0,sizeof(maps));
  53. memset(dp,0,sizeof(dp));
  54. for(i=1;i<=3;i++)
  55. {
  56. for(j=1;j<=n;j++)
  57. {
  58. scanf("%d",&maps[j][i]);
  59. }
  60. }
  61. for(i=1;i<=n;i++)
  62. {
  63. for(j=0;j<(1<<3);j++)
  64. {
  65. for(k=0;k<(1<<3);k++)
  66. {
  67. if(pan(j,k))
  68. {
  69. dp[i][j]=max(dp[i-1][k]+add(j,k,i),dp[i][j]);
  70. }
  71. }
  72. }
  73. }
  74. int maxx=-1;
  75. for(j=0;j<(1<<3);j++)
  76. {
  77. maxx=max(maxx,dp[n][j]);
  78. }
  79. printf("Case %d: ",cas);
  80. cout<<maxx<<endl;
  81. }
  82. }

sdut-2725-The Urge to Merge-状压DP的更多相关文章

  1. UVAlive 6560 - The Urge to Merge(状压dp)

    LA 6560 - The Urge to Merge option=com_onlinejudge&Itemid=8&page=show_problem&problem=45 ...

  2. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  3. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  4. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  5. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  6. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  7. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  8. HDU 1074 Doing Homework (状压dp)

    题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...

  9. 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP

    [BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...

  10. 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP

    [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...

随机推荐

  1. WinSock 异步I/O模型 转载

    如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了五种I/O模型,分别是: ■ 选择(select):■ 异步选择(WSAAsyncSelect) ...

  2. [学习笔记]设计模式之Decorator

    写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 Decorator(装饰)模式,可以动态地给一个对象添加一些额外的职能.为了更好地理解这个模式,我们将时间线拉回Bridge模式笔记的 ...

  3. 获取网络图片的大小 改变 图片色值 灰度什么的方法集合-b

    直接上代码了 头文件 // 图片处理 0 半灰色  1 灰度   2 深棕色    3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelTy ...

  4. 前端开发福音!阿里Weex跨平台移动开发工具开源-b

    阿里巴巴今天在Qcon大会上宣布跨平台移动开发工具Weex开放内测邀请.Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS.安卓.YunOS及 ...

  5. Microsoft HoloLens 技术解谜(下)

    读者提问之“HoloLens 的深度传感器有没有可能是基于 TOF?” 先介绍下背景知识,市面上常见的有三种类型的深度传感器: 结构光,这个技术的代表产品是 Kinect 一代,它的传感器芯片用的是 ...

  6. LA 3904

    一道DP题: 一共有三种砖,1*2,2*1,2*2,然后要你铺满整个n*2的地板,求不重复的铺法数: 方法: 首先计算了不考虑对称的情况,然后计算只考虑对称的情况: 所以结果就是(不考虑对称数+只考虑 ...

  7. 窗体前端显示(ShowWindowAsync有许多优点)

    H:=FindWindow('Tfrm_MainForm','aa');  if H>0 then  begin    ShowWindowAsync(h,SW_MAX);    SetFore ...

  8. linux 网络栈中的queueing

    这篇文章详细描述了在linux网络栈中queueing,及各种保证系统吞吐量和低延迟的方法机制.

  9. [性能分析]linux文件描述符(转)

    1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.l ...

  10. c3p0数据库连接池的使用

    一.c3p0与dbcp区别 dbcp没有自动回收空闲连接的功能 c3p0有自动回收空闲连接功能 <C3P0是Hibernate3.0默认的自带数据库连接池,DBCP是Apache开发的数据库连接 ...