题解 | #【模板】二维前缀和#

【模板】二维前缀和

http://www.nowcoder.com/practice/99eb8040d116414ea3296467ce81cbbc

解题思路大佬们都说了,这里提供下Python实现过程,供大家参考

while True:
    try:
        n, m, q = map(int, input().split())
        l = []
        for _ in range(n):
            l.append(list(map(int, input().split())))
        # dp[i][j]表示起点到l[i-1][j-1]的子矩阵的和
        dp = [[0 for i in range(m + 1)] for j in range(n + 1)]  # 让dp坐标与x1,y1,x2,y2,对齐 并且添加两个辅助列
        for i in range(1, n + 1):  # 行
            for j in range(1, m + 1):  # 列
                # 状态转移方程,dp[i][j]等于其上方所有行之和加上其左方所有列之和减去其左上方行列交叉导致的减掉双倍区域,再加上本单元格的值
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1] + l[i - 1][j - 1] - dp[i - 1][j - 1]
        for k in range(q):
            x1, y1, x2, y2 = map(int, input().split())
            # (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和。x2,y2的值 减去 x1, y1上面的行左边的列,再加上重叠相减的部分
            num = dp[x2][y2] + dp[x1 - 1][y1 - 1] - dp[x1 - 1][y2] - dp[x2][y1 - 1]
            print(num)
    except:
        break
全部评论

相关推荐

我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
拉丁是我干掉的:把上海理工大学改成北京理工大学。成功率增加200%
点赞 评论 收藏
分享
今天 00:11
已编辑
广东工业大学 算法工程师
避雷深圳  yidao,试用期 6 个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务