洛谷P2216 理想的正方形

2022-03-17 15:29:28 字數 796 閱讀 6285

題目

有可以直接找\(maxn[i][j][t]\)為\((i,j)\)為左下角長度為t的正方形內的最大值。

然後可以有以下轉移:

\(maxn[i][j][t] = max(maxn[i + 1][j][t-1], maxn[i][j][t-1], maxn[i][j + 1][t-1], maxn[i + 1][j + 1][t-1]);\)

然後考慮滾動陣列,最後答案直接列舉即可。

#include #define n 1011

using namespace std;

int n, m, k, ans = 2147483647;

int a[n][n], sum[n][n], minn[n][n], maxn[n][n];//maxn[i][j]表示以i,j為左下角的矩陣最大值。

int max(int a, int b, int c, int d)

int min(int a, int b, int c, int d)

inline void init()

for (int t = 2; t <= k; t++)//t是區間長度

for (int i = 1; i + 1 <= n; i++)

for (int j = 1; j + 1 <= m; j++)

}int main()

/*5 4 2

1 2 5 6

0 17 16 0

16 17 2 1

2 10 2 1

1 2 2 2

*/

洛谷P2216 理想的正方形 單調佇列

有乙個n m n times m n m的整數組成的矩陣,現請你從中找出乙個k k k times k k k的正方形區域,使得該區域所有數中的最大值和最小值的差最小。樸素的想法是直接暴力列舉區間,然後列舉其中的每一位。時間複雜度o n m k2 o nm times k 2 o nm k 2 另一...

洛谷P2216 理想的正方形 單調佇列

給出乙個n m n mn m的矩陣,現在要你從裡面找出乙個k k k kk k的矩陣,使得這個矩陣的最大值減去最小值最大。n,m 1e3 n,m leq1e3 n,m 1e 3。如果只是乙個序列,維護長度為k kk的區間的最大值減去最小值。直接用兩個單調佇列分別維護這個滑動視窗即可。那麼要維護乙個矩...

P2216 HAOI2007 理想的正方形()

題目鏈結 有乙個a乘b的整數組成的矩陣,現請你從中找出乙個nn的正方形區域,使得該區域所有數中的最大值和最小值的差最小。輸入輸出格式 輸入格式 第一行為3個整數,分別表示a,b,n的值 第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。每行相鄰兩數之間用一空格分隔。輸出格式 僅乙個整數...