CF1676D X-Sum 题解

题意

有一个 n×m 的国际象棋盘 a(i,j) 上有一个非负整数 aij

你要在上面放一个象,问它能攻击到的点上的非负整数和最大是多少。

(象走斜线,无距离限制)

思路

直接模拟复杂度达到 O(n3),不太行。

考虑预处理出每条斜线上的点上的非负整数和。

观察得到,左下-右上斜线上的点 i+j 相等,左上-右下斜线上的点 ij 相等。

(实际上可以把左下-右上斜线看作 y=x+b, 把左上-右下斜线看作 y=x+b

于是计算每个点对它所在斜线的贡献即可。

代码

#include <cstdio>
#include <cstring>
int T, n, m, s, a[250][250], l[550], r[550];
int main()
{
    scanf("%d", &T);
    while(T--)
    {
        memset(l, 0, sizeof l);
        memset(r, 0, sizeof r);
        scanf("%d%d", &n, &m);s = 0;
        for(int i = 1;i <= n;++i)
            for(int j = 1;j <= m;++j)
                scanf("%d", &a[i][j]), l[i + j] += a[i][j], r[i - j + m] += a[i][j];
        for(int i = 1, t;i <= n;++i)
            for(int j = 1;j <= m;++j)
                if((t = l[i + j] + r[i - j + m] - a[i][j]) > s) s = t;
        printf("%d\n", s);
    }
    return 0;
}
posted @   Jijidawang  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示