nlogn的最長上公升子串行,但是要輸出lis的長度和乙個最小字典序的lis。
然後怎麼輸出這個最小字典序的lis就成了問題,然後就翻被人的題解,發現就只有還儲存那個f陣列就行
f陣列還是儲存的到這個數的lis的長度,然後假如f[i]==f[j],則必有a[i]>=a[j],所以就肯定選擇a[j]是對的
然後就倒著掃一遍,相同的f[i]就取i靠後的那個。
**:
#include #include #include #include #include #include #include using namespace std;
#define maxn 100005
int a[maxn], d[maxn], f[maxn], path[maxn];
int n, len;
int main()
for (int i = n - 1, t = len; i >= 0; --i)
printf("%d\n", len);
for (int i = 1; i <= len; ++i)
}//system("pause");
//while (1);
return 0;
}
CDOJ 251 飛彈攔截 最長遞增子串行
點選開啟鏈結 就是尋找lis 並列印出來 dp i 表示到包括第i個數的前i個的最長遞增的長度 從數列從後往前找就好了 如果從前往後,前面的大數會覆蓋掉後面的小數,就不對了 1 include 2 using namespace std 34 const int maxn 1e5 10 5 6int...
又見攔截飛彈 LIS
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 大家對攔截飛彈那個題目應該比較熟悉了,我再敘述一下題意 某國為了防禦敵國的飛彈襲擊,新研製出來一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度。突然有一...
NYOJ 79 攔截飛彈 LIS
時間限制 3000 ms 記憶體限制 65535 kb難度 3 描述 某國為了防禦敵國的飛彈襲擊,發展中一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於等於前一發的高度。某天,雷達捕捉到敵國飛彈來襲。由於該系統還在試用階段,所以只用...