本文主要是介绍LIS hdu 5748 (Bellovin),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Bellovin
题意:给出序列a[ ],求f[ ],f[i]指到i最小LIS。
题解:LIS变形,设定一个数组b[ ],每查找一次,把a[i]加入b[ j],j为找到的子序列长度。
<span style="font-size:18px;">#include<cstdio>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;int main(){int t,n,i,a[100100],b;int s[100100];scanf ("%d",&t);while (t--){scanf ("%d",&n);for (i=0;i<n;i++){scanf ("%d",&a[i]);s[i]=INF;//初始化}for (i=0;i<n;i++){b=lower_bound(s,s+n,a[i])-s;//截止a[i]的LCS长度printf ("%d",b+1);//求字典序,需要+1if (i!=n-1)printf (" ");s[b]=a[i];//a[i]加入s数组,便于下一次查找}printf ("\n");}return 0;} </span>
这篇关于LIS hdu 5748 (Bellovin)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!