zoukankan      html  css  js  c++  java
  • [BZOJ1127/POI2008]KUP子矩阵

    Description

      给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k]


    Input

      输入k n(n<2000)和一个n*n的地图


    Output  

      输出矩形的左上和右下的列-行坐标 或NIE

    Sample Input

    inputdata1
    4 3
    1 1 1
    1 9 1
    1 1 1
    inputdata2
    8 4
    1 2 1 3
    25 1 2 1
    4 20 3 3
    3 30 12 2


    Sample Output

    outputdata1
    NIE
    outputdata2
    2 1 4 2

    题解(from 出题人):

      若存在a[i,j]∈[k,2k]直接输出。否则将a[i,j]>2k的点看做障碍物,用递推求F[i,j]表示由i,j往左有多长的连续一段不存在障碍物,类似的G[i,j]表示往右的长度。因为a[i,j]<k,故相邻前缀和不可能从<k变为>2k。故若存在S[i,l..r]>2k则必然存在S[i,l..p]∈[k,2k],求F值时判断是否有S[i,j-F[i,j]+1..j]∈[k,2k]即可。否则我们利用F与G求出最大和子矩阵Smax(经典算法,不赘述)。若Smax<k则无解,否则必然存在Smax的前缀和∈[k,2k]。

  • 相关阅读:
    python三元表达式
    购物车的升级系统
    python迭代器
    python函数装饰器
    python 闭包函数
    python名称空间与作用域
    python函数的嵌套
    python函数对象
    python函数之可变长参数
    python函数的参数
  • 原文地址:https://www.cnblogs.com/jinkun113/p/4901194.html
Copyright © 2011-2022 走看看