hdu2830 可交換行的最大子矩陣

2021-06-21 21:18:07 字數 1295 閱讀 3675

題意:

求最大子矩陣,但是相鄰的列之間可以相互交換...

思路:回想下固定的情況,記得那種情況是開倆個陣列 l[i] ,r[i],記錄小於等於i的最左邊和最右邊在哪個位置,對於這個題目,可以交換,也就是說順序是可以自己隨意更改的,那麼我們直接sort一便,然後在找最大就行了,說下具體過程,便於理解

開始我們建立乙個陣列dp[i] ,記錄第i列到當前j的位置的連續最大子串行,我們假設每一樣都是矩形的下低,我們在開個陣列tmp記錄所有的dp,然後sort,之後可以開個陣列l,r什麼的,

但也可以不開,因為排序的原因,我們只要這樣就行了 

for(j = 1 ;j <= m ;j ++) ans = maxx(ans ,dp[j] * j);(這個是從大到小排序)

或者 for(j = m ;j >= 1 ;j --) ans = maxx(ans ,dp[j] * (m - j + 1));(從小到大)

任選乙個都行,無所謂..時間複雜度是o(n * m + lg(m));

#include#include#include#define n (1000 + 100)

#define inf -1000000000

using namespacestd;

intdp[n];

inttmp[n];

charstr[n];

intmain

()sort(tmp+1,tmp+m+1);

for(

intii=m;ii>=1;ii--)

}printf("%d\n",ans);

}return0;

}

hdu 2830 任意交換列的矩陣

這2天 做的都是有關矩陣的 小小矩陣 竟然有這麼多 花頭.這題 的特點是 we can swap any two columns any times 就是可以任意交換x列與y列 任意次 一開始 我還擔心我的方法 會不會tle 看到3000ms就放心了。我總覺得 會有更高效的方法 可惜我還沒想到 我的...

最大子段和之可交換

題目模型 問題分析 錯誤code include typedef long long ll const int maxn 5e4 5 const ll inf 0x3f3f3f3f3f3f3f3f ll a maxn dp1 maxn dp2 maxn dp1 i 以a i 結尾的最大子段和,dp2...

hdu 2830 逐行掃瞄dp求最大完全矩形

求最大完全矩形的基本思想就是以每一行作為底,因為任意列可以呼叫,我們記錄當前行為底的時候以某乙個點的高度,然後排序,從大到小的排序,然後掃瞄到後面每乙個點的高度為矩形高度的最大矩形面積就是h i i 具體步驟如下 很好的思路 include include include include defin...