D. Walk on Matrix(超详细讲了原理)


D. Walk on Matrix


标签

  • 构造

简明题意

  • 假设有一个数字矩阵,每次可以向下或向右,问从左上角走到右下角的数字和最多是多少,那么显然这是一个dp。
  • 现在不问你数字和,而是把路径上的所有数都&起来,如果还是dp显然是错的。假设dp的到的结果是x,正确答案是y。
  • 现在给定k,需要你构造一个矩阵,使得|y-x|=k

思路

  • 首先我们思考什么时候dp是错的。假设矩阵中有一个点(x,y)是10101.此时最多两种选择,从(x-1,y)或(x,y-1)转移过来。再假设(x-1,y)是10000,(x,y-1)是101,如下表
        ?    10000
       101   10101
  • 那么dp时选择(x-1,y)位置的10000,得到10000,选择(x,y-1)位置的101,得到的是101,根据dp,(x,y)点会选择10000而不是101.
  • 现在假设矩阵是这样的(也就是多了一项)
        ?    10000    ?
       101   10101   100
  • 10101的结果是10000,那么100选择左边时得到的是0。如果10101选择了101得到101,那么最后得到的结果就是100.由此可见,dp会优先选择使更高的位为1的数。
  • 我们可以抓住dp的这个弱点,使得dp结果是0,而正确结果是k。现在思考如何构造。
  • 上面的例子中,如果把第一行第三个数填0
       ?    10000    0
      101   10101   100
  • 那么不考虑左上角的? dp的结果就是0。现在考虑如何填写?使得dp的结果仍然是0.我们只需要使得10000和101异或上?值不变即可。显然?可以填成111111,使得10000和101都不变。
      10101   10000    0
       101    10101   100
  • 这样的矩阵,dp的答案是0.现在我们想想如何使正确答案为k。显然这里从左上到右下一共有3条路径,分别为
____
     |        这一条结果为0
      ____
  
|             
|_______        这一条结果非0

________
        |       这一条结果为0
        |
  • 由上可知我们只能操作第二条路径使得第二条路径的结果为k。
  • 利用刚才的思路,我们可以让k加上10···0(很大),使得某一步会错误地选择10···0从而异或出很大的10···0。下面这个三角就是,10···0+k选择上面的会形成10···0,而选择左边的k会形成k。
       ?      10···0
       k      10···0+k 
  • 那么我们可以再仿照最开始举例思路,继续填
      ?      10···0     0
      k      10···0+k   k
  • 这样,使得两种路径的&都是0,我们现在只需要确定左上角的?给根据上面的举例,?填成1111···111即可。
  • 当然也可以填10···0+k,只要使得?下面和右边的数不变就可以了。
  • 至于10···0具体是多少,题目说了k<=1e5,那么 2 17 > 1
  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值