关于三目运算符与if语句的效率与洛谷P2704题解
题目描述
司令部的将军们打算在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啊,任何细节都决定成败啊。。。
附代码:
- #include<cstdio>
- using namespace std;
- int m,n;
- int ph[];
- int s[],nu[],man;
- int f[][][];
- void dfs(int ,int ,int ,int ,int );
- int main()
- {
- int i,j,l,k,ans=;
- char c;
- scanf("%d%d",&n,&m);
- for(i=;i<=n;i++)
- {
- c=getchar();
- while(c!='P'&&c!='H')
- c=getchar();
- j=;
- while(c=='P'||c=='H')
- {
- if(c=='H')
- ph[i]+=j;
- j=j<<;
- c=getchar();
- }
- }
- dfs(,,,,);
- for(i=;i<=n;i++)
- {
- for(j=;j<=man;j++)
- if(!(s[j]&ph[i]))
- for(k=;k<=man;k++)
- if(!(s[j]&s[k])&&!(s[k]&ph[i-]))
- for(l=;l<=man;l++)
- if(!(s[j]&s[l])&&!(s[l]&ph[i-]))
- f[i][j][k]=f[i][j][k]>(f[(i-)][k][l]+nu[j])?f[i][j][k]:(f[(i-)][k][l]+nu[j]);
- }
- for(i=;i<=man;i++)
- for(j=;j<=man;j++)
- if(f[n][i][j]>ans)
- ans=f[n][i][j];
- printf("%d",ans);
- return ;
- }
- void dfs(int now,int num,int ma,int l1,int l2)
- {
- int i;
- if(now>m)
- {
- s[++man]=num;
- nu[man]=ma;
- return ;
- }
- for(i=;i<=;i++)
- if(i<=-l1&&i<=-l2)
- dfs(now+,num+i*(<<now-),ma+i,l2,i);
- }
祝AC哟;
关于三目运算符与if语句的效率与洛谷P2704题解的更多相关文章
- SQLServer语句执行效率及性能测试
写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置STATISTICS我们可以查看执行SQL时的 ...
- mysql优化(三)–explain分析sql语句执行效率
mysql优化(三)–explain分析sql语句执行效率 mushu 发布于 11个月前 (06-04) 分类:Mysql 阅读(651) 评论(0) Explain命令在解决数据库性能上是第一推荐 ...
- 统计sql语句执行效率
--统计sql语句执行效率SELECT (total_elapsed_time / execution_count)/1000 N'平均时间ms' ,total_elapsed_time/1000 N ...
- 对于Oracle中分页排序查询语句执行效率的比较分析
转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...
- oracle中的exists 和not exists 用法 in与exists语句的效率问题
博文来源(oracle中的exists 和not exists 用法):http://chenshuai365-163-com.iteye.com/blog/1003247 博文来源( in与exi ...
- 提高Order by语句查询效率的两个思路
提高Order by语句查询效率的两个思路 2011-03-01 13:07 水太深 ITPUB 字号:T | T 在MySQL数据库中,Order by语句的使用频率是比较高的.但是众所周知,在使用 ...
- Mysql explain分析sql语句执行效率
mysql优化–explain分析sql语句执行效率 Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 ...
- 进阶系列一【绝对干货】---SQL语句执行效率优化
1.尽量适用联接查询来取代子查询 2.如果要用子查询,用EXISTS替代IN.用NOT EXISTS替代NOT IN,因为EXISTS引入的子查询只是测试是否存在符合子查询中指定条件的行,效率较高.无 ...
- SQL语句执行效率及分析(note)
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...
随机推荐
- Codeforces 379D - New Year Letter
原题地址:http://codeforces.com/contest/379/problem/D 题目大意:给出一种生成字符串的方法 s[k] = s[k - 2] + s[k - 1],其中加法意为 ...
- pinyin4j使用示例
pinyin4j的主页:http://pinyin4j.sourceforge.net/pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制pinyin4j是一个支持将中文转换到拼 ...
- LA 3641 (置换 循环的分解) Leonardo's Notebook
给出一个26个大写字母的置换B,是否存在A2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A2就相当于将项链旋转了两 ...
- android中sqlite3常用命令
1)打开数据库 在adb shell模式下执行命令sqlite3 + 数据库名称,例如打开email中的EmailProvider.db数据库: 2)sqlite3特殊命令 大多数候,sqlite3读 ...
- mysql的几种隐式转化
1. 表定义是字符型,传入的是Int 2. 字符集不一致.表定义的字段是gbk,传入的是utf8:这种在存储过程中出现得比较多. 数据库的字符集utf8 mysql> show create d ...
- 记录一次MySQL复制问题的处理
备库: mysql> show slave status\G*************************** 1. row *************************** Slav ...
- 11、WebView 使用总结
<WebView android:id="@+id/webview" android:background="@color/white" android: ...
- Web服务器(Apache)虚拟主机的配置
一.定义 所谓虚拟主机是指在一台服务器里运行几个网站,提供WEB.FTP.Mail等服务. 二.虚拟主机的实现方法有三种: 基于IP的方法,基于主机名的方法和基于端口的法官法. ...
- ***JAVA多线程的应用场景和应用目的举例
多线程使用的主要目的在于: 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的.简单的说,可能就是一个请求一个线程.或多个请求一个线程.如果是单线程,那同时只能处理一个用户的请求. ...
- Winxp下搭建SVN服务器
本文介绍一种在winxp下搭建SVN服务器的方法. (1) 需要下载Slik-Subversion和TortoiseSVN两个软件.我使用的版本是Slik-Subversion-1.8.3-1-win ...