zoukankan      html  css  js  c++  java
  • 论OI中最大值的选取

    为什么我的Floyd会输出负数啊?
    为什么我的代码写对了却全都爆零了啊?

    那么很可能是你的INF取大/小了!

    那么inf到底应该取什么值呢?

    首先,inf应该要比一般的题目中出现的数据要大,但是又不能超过max_int。

    1e9是一个好选择!

    为什么不是0x7fffffff呢?这不是int的最大值吗

    因为有的时候(例如Floyd等算法)会出现两个inf相加的情况,如果inf取max_int则加法会造成溢出,而取1e9则不会出现这样的情况。

    但是初始化会不会很麻烦?

    答案是肯定的,谁都不愿意为了一个初始化去写循环,又慢而且还麻烦。

    我们注意到0x3f3f3f3f的每8位(int为32位)二进制位上都是0x3f,所以我们可以方便的使用memset来方便的初始化数组

    而0x3f3f3f3f等于1061109567,2*inf=2122219134,即使是两倍的inf也并不会溢出

    综上所述,inf的选择应该是0x3f3f3f3f
    当然如果没有加法操作用0x7f7f7f7f也是可以的,初始化时直接用memset 0x7f就可以了

  • 相关阅读:
    Spring.Net初认识——竹子整理
    SOA:面向服务编程——竹子整理
    unity安装记录
    wcf第三方客户端与wcf服务之间调用入门
    Winform VS2015打包
    OWINS是什么(转载)
    [LR]遇到的坑及常用技巧
    性能测试简单调优
    es6解构赋值
    es6 笔记
  • 原文地址:https://www.cnblogs.com/Alessandro/p/9692495.html
Copyright © 2011-2022 走看看