P2004 领地选择
https://www.luogu.com.cn/problem/P2004
涉及知识点:二维前缀和,差分,(动态规划?)
黄色题
涉及知识点:二维前缀和,差分,(动态规划?)
黄色题
思路:
一.先预处理求出每个以(i,j)为右下角的矩阵的总和(也就是土地价值和)
一.先预处理求出每个以(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; }

浙公网安备 33010602011771号