P2004 领地选择

https://www.luogu.com.cn/problem/P2004
涉及知识点:二维前缀和,差分,(动态规划?)
黄色题
 
思路:
一.先预处理求出每个以(i,j)为右下角的矩阵的总和(也就是土地价值和)
二.然后求出以每个点为右下角的矩阵里价值最大的点的位置就可以了(记得i-c+1) 记得+1!!!!!!!!!!!!!!!

二维前缀和详解:https://www.cnblogs.com/acioi/p/11705205.html
 
代码:
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
const int Max = 1003;
int a[Max][Max];
int f[Max][Max];
signed main()
{
    int n,m,c;
    cin >> n >> m >> c;
    for(register int i = 1;i <= n;++ i)
        for(register int j = 1;j <= m;++ j)
            cin >> a[i][j],f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + a[i][j];
    int M = 0,x,y;
    for(register int i = c;i <= n;++ i)
        for(register int j = c;j <= m;++ j)
            if(f[i][j] + f[i - c][j - c] - f[i - c][j] - f[i][j - c] > M)
            {
                int acioi = f[i][j] + f[i - c][j - c] - f[i - c][j] - f[i][j - c];
                M = acioi;
                x = i,y = j;
            }
//    cout << x << " " << y << endl;
    cout << x - c + 1 << " " << y - c + 1 << endl;
    return 0;
}

 

posted @ 2022-07-19 17:33  -イレイナ  阅读(48)  评论(0)    收藏  举报