Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13646 Accepted Submission(s): 3879
链接:LIS 算法解析
for i=1 to total-1 for j=i+1 to total if a[i]<a[j] then if dp[i]+1 > dp[j] dp[j] = dp[i]+1;
链接:Dynamic Programming之Longest Increasing Subsequence (LIS)问题
2) dp[i]=max{dp[j]}+1;(1<=j<i且a[j]<a[i])
for i=2 to total int m=0; for j=1 to i-1 if dp[j] > m && a[j] < a[i] then m=dp[j]; dp[i]=m+1;
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 int a[500001]; 5 int q[500001]; 6 int BinSearch(int max,int min,int des) //二分查找第一个比des大的数,并返回坐标 7 { 8 int l = min,r = max; 9 int mid,t; 10 while(l<=r){ 11 mid = (l+r)/2; 12 if(des<=q[mid]){ 13 t=mid; 14 r=mid-1; 15 } 16 else{ 17 l=mid+1; 18 } 19 } 20 return t; 21 } 22 int main() 23 { 24 int n,num=1; 25 while(cin>>n){ 26 for(int i=1;i<=n;i++){ 27 int t,r; 28 scanf("%d%d",&t,&r); 29 a[t]=r; 30 } 31 q[0] = 0; 32 int f = 1; 33 for(int i=1;i<=n;i++){ 34 if(a[i]>a[i-1]){ 35 q[f++]=a[i]; 36 } 37 else{ 38 int t = BinSearch(f-1,1,a[i]); 39 q[t] = a[i]; 40 41 } 42 /* 43 for(int j=1;j<f;j++) 44 cout<<q[j]<<' '; 45 cout<<endl; 46 */ 47 } 48 cout<<"Case "<<num++<<':'<<endl; 49 if(f-1==1) 50 cout<<"My king, at most "<<f-1<<" road can be built."<<endl; 51 else 52 cout<<"My king, at most "<<f-1<<" roads can be built."<<endl; 53 cout<<endl; 54 } 55 return 0; 56 }
1 #include <iostream>
2 #include <stdio.h>
3 using namespace std; 4 int a[500001]; 5 int q[500001]; 6 int BinSearch(int n) //二分查找
7 { 8 int len = 1; 9 q[1] = a[1]; 10 for(int i=2;i<=n;i++){ 11 int l=1,r=len; 12 while(l<=r){ 13 int mid = (l+r)/2; 14 if(a[i]<=q[mid]) 15 r=mid-1; 16 else
17 l=mid+1; 18 } 19 q[l] = a[i]; 20 if(l>len) 21 len=l; 22 } 23 return len; 24 } 25 int main() 26 { 27 int n,num=1; 28 while(cin>>n){ 29 for(int i=1;i<=n;i++){ 30 int t,r; 31 scanf("%d%d",&t,&r); 32 a[t]=r; 33 } 34
35 int len = BinSearch(n); 36
37 cout<<"Case "<<num++<<':'<<endl; 38 if(len==1) 39 cout<<"My king, at most "<<len<<" road can be built."<<endl; 40 else
41 cout<<"My king, at most "<<len<<" roads can be built."<<endl; 42 cout<<endl; 43 } 44 return 0; 45 }
Freecode : www.cnblogs.com/yym2013