普通情況:
- #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;??
- }??
?
二分優(yōu)化
- #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;??
- }??
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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