bzoj 1046 HAOI2007 上公升序列

2021-07-05 16:20:01 字數 632 閱讀 8272

/*首先用f[i]表示從i開始的最長上公升子串行的長度(注意這裡和平時的不一樣,是以i開頭而不是以1到i)

這就相當於倒序做一遍最長下降子串行

然後要用到貪心

首先假設要取長度為x的,如果比算出來的max大(max正序倒序都一樣的),肯定無解

然後從頭開始取,因為從頭取的下標字典序最小,如果a[i]比上乙個取的last大,並且f[i]>=當前的x,

那麼a[i]可以取,然後last=a[i],x--,一直這樣做下去*/

#include#includeusing namespace std;

int a[10002],b[10002];

int f[10002],fi[10002];

int n,maxx,m,x;

void get_prelis()

} for(int i=1;i<=n;++i) fi[i]=f[n-i+1];

}void getlis(int p)

} printf("\n");

}int main()

get_prelis();

scanf("%d",&m);

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

}

BZOJ 1046 HAOI 上公升序列

1046 haoi2007 上公升序列 time limit 10 sec memory limit 162 mbsubmit 5376 solved 1862 submit status discuss description 對於乙個給定的s 若有p 滿足 x1 x2 xm 且 ax1 2 出s...

BZOJ1046 HAOI2007 上公升序列

portal 首先是否存在很容易。考慮如何輸出最小字典序的方案。注意。是位子的字典序,不是值。那麼這樣的話,倒過來做一遍最長下降子串行。f i 表示以 i 開頭的最長上公升子串行長度 找答案的時候就順著找,每次滿足條件就輸出。include include include define n 1000...

bzoj1046 HAOI2007 上公升序列

傳送門 首先我們可以倒著做一次最長下降序列,記錄以x結尾的最長下降序列的長度。然後反過來,我們就有了以x開頭的最長上公升序列的長度。我們正著推過去,可以知到當長度大於x是這個點可選,此時長度 1,輸出答案。有點說不清楚,沒看懂的請轉彎 var a,f array 0.10005 of longint...