日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态规划:LIS优化

發布時間:2023/12/2 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划:LIS优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于1D/1D動態規劃來說,理論時間復雜度都是O(n^2)的,這種動態規劃一般都可以進行優化,貼一篇文章

https://wenku.baidu.com/view/e317b1020740be1e650e9a12.html

這里介紹最簡單的一種,LIS的求法

其實就是二分,找單調性來二分

HDU1950是一道裸題

1 #include <iostream> 2 #include<cstring> 3 #include <algorithm> 4 #define INF 0x3f3f3f3f 5 using namespace std; 6 const int N = 1e5 + 5; 7 int s[N]; 8 int n,p,a[N]; 9 int len; 10 int main() 11 { 12 cin>>n; 13 while(n--){ 14 cin>>p; 15 memset(s,0,sizeof(s)); 16 for(int i = 0;i<p;i++)cin>>a[i]; 17 s[1] = a[0];len = 1;//長度從1開始 18 for(int i = 1;i<p;i++){ 19 20 int t = a[i]; 21 if(t>s[len])s[++len] = a[i]; 22 else{ 23 /*************/int l = 1,r = len,mid;//這里的二分法采用了左閉右閉的思路 24 <span style="white-space:pre"> </span>int ans = 0; 25 while(l<=r) 26 { 27 mid = (l+r)/2; 28 if(s[mid]<t) 29 {l = mid +1;ans = max(ans,mid);}//ans即為思路中的j,j必然為s數組中小于t的最大的數 30 else r = mid-1; 31 } 32 s[ans+1] = t;/******************/ 33 } 34 } 35 //for(int i = 1;i<p;i++){cout<<s[i];}//有必要可以打開看看s中存的是什么值 36 cout<<len<<endl; 37 } 38 return 0; 39 }

然后

1 int p = lower_bound(s+1,s+len+1,t)-s; 2 s[p] = t;

如果覺得不對可以找到合唱隊形那個題的程序對拍一下子

轉載于:https://www.cnblogs.com/aininot260/p/9627043.html

總結

以上是生活随笔為你收集整理的动态规划:LIS优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。