hdu 1025 二分查找+最长上升子序列
2013-08-14 11:36
543 查看
#include<iostream> #include<stdlib.h> #include<algorithm> using namespace std; const int N=500010; int a ,dp ; int LIS(int n) { int high,low,mid,len=1; dp[1]=a[1]; for(int i=2;i<=n;i++) { low=1; high=len;//不能是high=n; while(low<=high) { mid=(low+high)/2; if(a[i]>dp[mid]) low=mid+1; else high=mid-1; } dp[low]=a[i]; if(low>len) len=low; } return len; } int main() { int A,B,N,M,t=0; while(scanf("%d",&N)!=EOF) { t++; for(int i=0;i<N;i++) { cin>>A>>B; a[A]=B;//很巧妙的 } M=LIS(N); printf("Case %d:\n",t); if( M==1)printf("My king, at most 1 road can be built.\n\n");//注意roads还是road
else printf("My king, at most %d roads can be built.\n\n",M); } system("pause"); return 0; }
相关文章推荐
- 动态规划之编号动态规划:hdu 1025(dp+二分 求最长上升子序列)
- HDU 1025 最长上升子序列变形 (dp+二分)
- hdu 1025 最长严格上升子序列
- HDU 1025 最长上升子序列
- HDU - 1025 Constructing Roads In JGShining's Kingdom (nlogn 最长上升子序列)
- HDU-1905-Bridging signals(二分求最长上升子序列)
- 【模版】二分查找、最长上升子序列(LIS)、最长下降子序列模版
- HDU 1025 最长上升子序列
- HDU 1025 Constructing Roads (最长上升子序列O(n*logn)算法)
- hdu 1025 Constructing Roads In JGShining's Kingdom(即求最长上升子序列)
- hdu 1025 Constructing Roads In JGShining's Kingdom(树状数组求最长上升子序列)
- HDU-1025 Constructing Roads In JGShining's Kingdom O(nlogn)的最长上升子序列
- 【DP】HDU 1025 Constructing Roads In JGShining's Kingdom 最长上升子序列
- HDU 1025 —— Constructing Roads In JGShining's Kingdom 最长上升子序列
- POJ2533, 最长上升子序列(贪心+二分查找时间复杂度O(nlogn))
- 使用二分查找求解最长上升子序列
- HDU 1025 Constructing Roads In JGShining's Kingdom(DP,LIS最长上升子序列)
- hdu 1025 Constructing Roads In JGShining's Kingdom 最长上升子序列(nlogn)
- HDU 1025 Constructing Roads In JGShining's Kingdom(LIS最长上升子序列)
- HDU 1025 A - Constructing Roads In JGShining's Kingdom(最长上升子序列)