POJ 1952 解題報告

2021-07-06 11:39:28 字數 1276 閱讀 2025

這道題一部分是求最長遞減子串行,但是由於要求不重複的最長子序列的個數,所以難度要大些。

我這裡用的是用乙個set過濾重複。算是比較笨的方法,不過也好理解些。比較聰明的方法見這裡:

另外,這道題我用c++提交是wa,但是用g++提交ac。由於discuss上面有測試資料,所以基本肯定是編譯器的差異。我也是第一次遇到c++不過而g++能過的。

thestoryofsnow

1952

accepted

708k

141ms

g++1734b

/* 

id: thestor1

lang: c++

task: poj1952

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int maxn = 5000;

int main()

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

}} for (int i = 0; i < n; ++i)

setprevs;

// start from behind to front,

// because if the front and behind is the same prices,

// whatever in the front is contained in the behind(count)

// the opposite is not true

for (int j = i - 1; j >= 0; --j)

}} int maxlen = 1;

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

}int total = 0;

setends;

// similiar to the above comment, we need to add counts from behind to front

// to add all the necessary counts but no overlap

for (int i = n - 1; i >= 0; --i)

}printf("%d %d\n", maxlen, total);

} return 0;

}

POJ 1952 最長下降子串行 方案數

求最長下降子串行 簡單 就是求方案數比較麻煩點 看了別人的解題報考才懂 也對最長 子串行的理解更深一步 include include includeusing namespace std const int maxn 5005 int n int price maxn len maxn count...

POJ 1952(最長不下降子串行的個數)

求乙個序列的最長不下降子串行的長度,與個數 相同數列算1個 關鍵是如何判重。顯然如果之前有乙個尾數相同且長度相同的序列,哪麼後乙個包含前乙個所有可能的序列相同的序列,故將前乙個序列刪除 重複 program p1952 var n,i,j,ans longint a,len,f,path array...

POJ 1952(最長不下降子串行的個數)

求乙個序列的最長不下降子串行的長度,與個數 相同數列算1個 關鍵是如何判重。顯然如果之前有乙個尾數相同且長度相同的序列,哪麼後乙個包含前乙個所有可能的序列相同的序列,故將前乙個序列刪除 重複 program p1952 var n,i,j,ans longint a,len,f,path array...