题目描述

司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示(我就不贴图)

如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。 现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。

——by洛谷

https://daniu.luogu.org/problem/show?pid=2704



棋盘模型的状压DP;

f[i][j][k]表示前i行,本行状态为j号,上行为k号,j,k是初始化出来的存状态的数组的编号;

转移时按题意考虑冲突状态排除;

其实本篇的要点是比较三目运算符与if语句的效率:

(因为今天旁边有人A了这个题效率竟然比我高!!)

这是代码一的ans汇总:

这是代码二的:

然后代码一的效率:

这是代码二的:

。。。。。。

我的效率啊!!!

事实证明,三目运算符比if语句的效率(无else)差;

不是第一次见了,记得上次写了线段树的比赛题,有关区间最值的,竟被卡的常,改成if才A了,幸亏IOI赛制。。。

事实证明搞OI啊,任何细节都决定成败啊。。。

附代码:

  1. #include<cstdio>
  2. using namespace std;
  3. int m,n;
  4. int ph[];
  5. int s[],nu[],man;
  6. int f[][][];
  7. void dfs(int ,int ,int ,int ,int );
  8. int main()
  9. {
  10. int i,j,l,k,ans=;
  11. char c;
  12. scanf("%d%d",&n,&m);
  13. for(i=;i<=n;i++)
  14. {
  15. c=getchar();
  16. while(c!='P'&&c!='H')
  17. c=getchar();
  18. j=;
  19. while(c=='P'||c=='H')
  20. {
  21. if(c=='H')
  22. ph[i]+=j;
  23. j=j<<;
  24. c=getchar();
  25. }
  26. }
  27. dfs(,,,,);
  28. for(i=;i<=n;i++)
  29. {
  30. for(j=;j<=man;j++)
  31. if(!(s[j]&ph[i]))
  32. for(k=;k<=man;k++)
  33. if(!(s[j]&s[k])&&!(s[k]&ph[i-]))
  34. for(l=;l<=man;l++)
  35. if(!(s[j]&s[l])&&!(s[l]&ph[i-]))
  36. f[i][j][k]=f[i][j][k]>(f[(i-)][k][l]+nu[j])?f[i][j][k]:(f[(i-)][k][l]+nu[j]);
  37. }
  38. for(i=;i<=man;i++)
  39. for(j=;j<=man;j++)
  40. if(f[n][i][j]>ans)
  41. ans=f[n][i][j];
  42. printf("%d",ans);
  43. return ;
  44. }
  45. void dfs(int now,int num,int ma,int l1,int l2)
  46. {
  47. int i;
  48. if(now>m)
  49. {
  50. s[++man]=num;
  51. nu[man]=ma;
  52. return ;
  53. }
  54. for(i=;i<=;i++)
  55. if(i<=-l1&&i<=-l2)
  56. dfs(now+,num+i*(<<now-),ma+i,l2,i);
  57. }

祝AC哟;

关于三目运算符与if语句的效率与洛谷P2704题解的更多相关文章

  1. SQLServer语句执行效率及性能测试

    写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的 ...

  2. mysql优化(三)–explain分析sql语句执行效率

    mysql优化(三)–explain分析sql语句执行效率 mushu 发布于 11个月前 (06-04) 分类:Mysql 阅读(651) 评论(0) Explain命令在解决数据库性能上是第一推荐 ...

  3. 统计sql语句执行效率

    --统计sql语句执行效率SELECT (total_elapsed_time / execution_count)/1000 N'平均时间ms' ,total_elapsed_time/1000 N ...

  4. 对于Oracle中分页排序查询语句执行效率的比较分析

    转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...

  5. oracle中的exists 和not exists 用法 in与exists语句的效率问题

    博文来源(oracle中的exists 和not exists 用法):http://chenshuai365-163-com.iteye.com/blog/1003247 博文来源(  in与exi ...

  6. 提高Order by语句查询效率的两个思路

    提高Order by语句查询效率的两个思路 2011-03-01 13:07 水太深 ITPUB 字号:T | T 在MySQL数据库中,Order by语句的使用频率是比较高的.但是众所周知,在使用 ...

  7. Mysql explain分析sql语句执行效率

    mysql优化–explain分析sql语句执行效率 Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 ...

  8. 进阶系列一【绝对干货】---SQL语句执行效率优化

    1.尽量适用联接查询来取代子查询 2.如果要用子查询,用EXISTS替代IN.用NOT EXISTS替代NOT IN,因为EXISTS引入的子查询只是测试是否存在符合子查询中指定条件的行,效率较高.无 ...

  9. SQL语句执行效率及分析(note)

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...

随机推荐

  1. Codeforces 379D - New Year Letter

    原题地址:http://codeforces.com/contest/379/problem/D 题目大意:给出一种生成字符串的方法 s[k] = s[k - 2] + s[k - 1],其中加法意为 ...

  2. pinyin4j使用示例

    pinyin4j的主页:http://pinyin4j.sourceforge.net/pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制pinyin4j是一个支持将中文转换到拼 ...

  3. LA 3641 (置换 循环的分解) Leonardo's Notebook

    给出一个26个大写字母的置换B,是否存在A2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A2就相当于将项链旋转了两 ...

  4. android中sqlite3常用命令

    1)打开数据库 在adb shell模式下执行命令sqlite3 + 数据库名称,例如打开email中的EmailProvider.db数据库: 2)sqlite3特殊命令 大多数候,sqlite3读 ...

  5. mysql的几种隐式转化

    1. 表定义是字符型,传入的是Int 2. 字符集不一致.表定义的字段是gbk,传入的是utf8:这种在存储过程中出现得比较多. 数据库的字符集utf8 mysql> show create d ...

  6. 记录一次MySQL复制问题的处理

    备库: mysql> show slave status\G*************************** 1. row *************************** Slav ...

  7. 11、WebView 使用总结

    <WebView android:id="@+id/webview" android:background="@color/white" android: ...

  8. Web服务器(Apache)虚拟主机的配置

    一.定义    所谓虚拟主机是指在一台服务器里运行几个网站,提供WEB.FTP.Mail等服务.    二.虚拟主机的实现方法有三种:    基于IP的方法,基于主机名的方法和基于端口的法官法.    ...

  9. ***JAVA多线程的应用场景和应用目的举例

    多线程使用的主要目的在于: 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的.简单的说,可能就是一个请求一个线程.或多个请求一个线程.如果是单线程,那同时只能处理一个用户的请求. ...

  10. Winxp下搭建SVN服务器

    本文介绍一种在winxp下搭建SVN服务器的方法. (1) 需要下载Slik-Subversion和TortoiseSVN两个软件.我使用的版本是Slik-Subversion-1.8.3-1-win ...