普通情況:
- #include?<stdio.h> ??
- #include?<algorithm> ??
- #include?<string.h> ??
- using ? namespace ?std;??
- ??
- int ?a[1005],dp[1005],n;??
- ??
- int ?LIS()??
- {??
- ???? int ?i,j,ans,m;??
- ????dp[1]?=?1;??
- ????ans?=?1;??
- ???? for (i?=?2;i<=n;i++)??
- ????{??
- ????????m?=?0;??
- ???????? for (j?=?1;j<i;j++)??
- ????????{??
- ???????????? if (dp[j]>m?&&?a[j]<a[i])??
- ????????????m?=?dp[j];??
- ????????}??
- ????????dp[i]?=?m+1;??
- ???????? if (dp[i]>ans)??
- ????????ans?=?dp[i];??
- ????}??
- ???? return ?ans;??
- }??
?
二分優化
- #include?<stdio.h> ??
- #include?<string.h> ??
- #include?<algorithm> ??
- using ? namespace ?std;??
- ??
- int ?a[40005],dp[40005],n;??
- ??
- int ?bin( int ?size, int ?k)??
- {??
- ???? int ?l?=?1,r?=?size;??
- ???? while (l<=r)??
- ????{??
- ???????? int ?mid?=?(l+r)/2;??
- ???????? if (k>dp[mid])??
- ????????????l?=?mid+1;??
- ???????? else ??
- ????????????r?=?mid-1;??
- ????}??
- ???? return ?l;??
- }??
- ??
- int ?LIS()??
- {??
- ???? int ?i,j,ans=1;??
- ????dp[1]?=?a[1];??
- ???? for (i?=?2;?i<=n;?i++)??
- ????{??
- ???????? if (a[i]<=dp[1])??
- ????????????j?=?1;??
- ???????? else ? if (a[i]>dp[ans])??
- ????????????j?=?++ans;??
- ???????? else ??
- ????????????j?=?bin(ans,a[i]);??
- ????????dp[j]?=?a[i];??
- ????}??
- ???? return ?ans;??
- }??
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
