关于三目运算符与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目的: 查询性能测试, ...
随机推荐
- Ural1076(km算法)
题目大意 给出n*n表格,第a[i,j]表示i到j的权值,现在我们要将每个a[i,j]=sum[j]-a[i,j], 求出当前二分图a[][]最小匹配 最小匹配只需将权值取负后,求二分图最大匹配,使用 ...
- Java应用调优指南之-工具篇
1. 土法调优两大件 先忆苦思甜,一般人在没有Profile工具的时候,调优的两大件,无非Heap Dump 与 Thread Dump. 1.1 Heap Dump jmap -dump:live, ...
- Please ensure that adb is correctly located at……问题解决方案
启动android模拟器时.有时会报The connection to adb is down, and a severe error has occured.的错误.在网友说在任务管理器上把所有ad ...
- TeamViewer
TeamViewer远程连接非常好用
- Kafka 设计与原理详解
一.Kafka简介 本文综合了我之前写的kafka相关文章,可作为一个全面了解学习kafka的培训学习资料. 转载请注明出处 : 本文链接 1.1 背景历史 当今社会各种应用系统诸如商业.社交.搜索. ...
- Storm入门教程 第二章 构建Topology[转]
2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies Streams Spouts Bolts Stream groupings Reliability ...
- android studio SDK版本的调节
android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 17 ...
- SDUT 3571 Password 暴力搜索
这个题如果裸搜肯定超时了 但是我们可以枚举,用初始串的哪一位数字去填目标串的那一位数字 这样就是暴力6!,复杂度很低,然后需要解决过程中经过的点的问题, 因为是从左向右走,所以记录当前光标, 和当前达 ...
- SQL 语句记录
1.创建一个table @"create table rockTB(myId integer primary key autoincrement not null, time varchar ...
- 【LeetCode 169】Majority Element
Given an array of size n, find the majority element. The majority element is the element that appear ...