題意:有乙個矩陣,上面有f和r,求最大由f組成的子矩陣的大小
n <= 1000
思路一:dp,4維,不可不可。
思路二:「二維滑動視窗」。自底向上,自左向右掃瞄,讓len(i,j)表示往下到底f最長的長度,left(i,j),right(i,j)表示從右到左同樣是len(i,j)能夠擴充套件到多遠。 有這樣的狀態轉移:
len(i,j) = len(i-1,j) + 1。 left(i,j) = max(left(i-1,j),left_bound) right(i,j) = (min(right(i-1,j),right_bound)
#include using namespace std;
typedef long long ll;
const int maxn = 1001;
int kase, n, m, mat[maxn][maxn], up[maxn][maxn], l[maxn][maxn], r[maxn][maxn];
int main()
}int ans = 0;
for(int i = 0; i < n; ++i)
else
}for(int j = m-1; j >= 0; --j)
else }}
printf("%d\n", ans*3);
}}
UVa 12174 滑動視窗 Shuffle
首先預處理一下以每個數為結尾的前s個數是否能構成乙個1 s的排列。可以用cnt陣列來記錄每個數出現的次數和用乙個變數記錄一共有多少個不同的數出現。然後列舉每種可能的情況,也就是列舉第一首歌會出現的位置,注意要考慮到不完整的序列。不長,但是那個ok陣列寫起來有點蛋疼,因為要考慮到不完整序列的存在,改了...
uva 11572 唯一的雪花 (滑動視窗)
題意 輸入乙個長度為n n 10 6 的序列a,找乙個盡量長的連續子串行a l a r 使得序列中沒有相同的元素。這道題要用滑動視窗的思想,右端點一直擴充套件直至右端點元素與視窗內元素重複時,刪除左端點元素直至右端點元素與視窗內元素不相同。找到視窗內元素最多時就是最長連續子串行。map實現 incl...
UVA 11572 唯一的雪花 滑動視窗
這道題採用滑動視窗的做法 set o n 首先l和r都指向a 0 這時我們擴充套件r,直到r擴充套件不了,我們擴充套件l,怎麼判斷r擴充套件不了了呢,可以用乙個set,把擴充套件過的元素全部insert到set裡,當a r 1 的元素已經在set裡出現過或者a r 已經是最後乙個元素,我們就不能再擴...