dp的做法,複雜度是 o(n^2),只能得100分,乙個dp求的是最長下降子串行長度,乙個dp求的是最少有多少個最長不上公升序列,
#includeusing namespace std;
const int maxn=1e5+5;
int f[maxn];
int dp[maxn];
int main()
n--;
dp[1]=1;
int res=0;
for(int i=2;i<=n;++i)
res=max(res,dp[i]);
} cout用乙個二分,複雜度就降到o(nlogn) (我也是看的洛谷題解的第一篇,想破腦袋也想不出來 dp+貪心
#includeusing namespace std;
const int maxn=1e5+5;
int h[maxn];
int f[maxn];
int main()
n--;
f[0]=9e6+5;
for(int i=1;i<=n;++i)//f[x]代表長度為x的最大結點
else
else r=mid;
} if(l!=0) f[l]=h[i];
} }coutelse
else l=mid+1;
} f[l]=h[i];
} } cout
}
luogu P1020 飛彈攔截
p1020 飛彈攔截 題目詳情 題目分析 一開始用的單調棧,後來發現不行,因為如果我們假設有這樣的序列 3 2 1 99 1當遍歷到99時,我們的棧會被我們自動清除,這時最後的最長不上公升序列就只有3,而正確答案是4。upper bound 返回有序序列中第乙個大於查詢值的指標。lower boun...
1020 飛彈攔截
難度 普及 提高 題目型別 動規 提交次數 1 涉及知識 線性動規 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套...
P1020 飛彈攔截
題目描述 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度...