hdu1025 Constructing Roads In JGShining's Kingdom
来源:互联网 发布:王者荣耀网络延迟460 编辑:程序博客网 时间:2024/05/16 16:28
最大上升子序列LIS 思路就是开一个栈,每次取栈顶元素top和读到的元素temp做比较,如果temp > top 则将temp入栈;如果temp < top则二分查找栈中的比temp大的第1个数,并用temp替换它。 最长序列长度即为栈的大小top。
题目好难懂,懂了之后也没想到这是一个LIS的题目,注意输出的细节,wrong了n遍
输出,注意一条多条的不同输出,样例之间打印空行
2、题目大意
有2n个城市,其中有n个富有的城市,n个贫穷的城市,其中富有的城市只在一种资源富有,且富有的城市之间富有的资源都不相同,贫穷的城市只有一种资源贫穷,且各不相同,现在给出一部分贫穷城市的需求,每个需求都是一个贫穷的向一个富有的城市要资源,且每个富有的城市都想向贫穷的城市输入自己富有的那部分资源,现在为了运输要建设多条路,但是路与路之间不允许有交叉,求满足贫穷城市的各种要求最多可以建设多少条路
3、解题思路:
将贫穷的城市按从小到大的顺序排列,然后求富有的城市序号的最大上升子序列LIS解决即可
#include<iostream>#include<stdio.h>#include<math.h>#include<algorithm>#include<string.h>using namespace std;int stack[1000005];int st[1000005];int n;int main(){int a,b,i,j;int le,ri;int t=1;while(scanf("%d",&n)!=EOF){//printf("nn=%d\n",n);//memset(stack,0,sizeof(stack));//memset(st,0,sizeof(st));for(i=1;i<=n;i++){scanf("%d%d",&a,&b);st[a]=b;}int ans=1;stack[1]=st[1];//printf("ss\b\n");for(i=2;i<=n;i++){if(stack[ans]<st[i]){ans++;stack[ans]=st[i];}else{le=1;ri=ans;while(le<=ri){int mid=(le+ri)/2;if(stack[mid]<=st[i])le=mid+1;elseri=mid-1;}stack[le]=st[i];if(le>ans)ans++;}}printf("Case %d:\n",t++);if(ans==1)printf("My king, at most %d road can be built.\n\n",ans);elseprintf("My king, at most %d roads can be built.\n\n",ans);}return 0;}
0 0
- hdu1025 Constructing Roads In JGShining's Kingdom
- HDU1025 Constructing Roads In JGShining's Kingdom
- hdu1025-Constructing Roads In JGShining's Kingdom
- HDU1025 Constructing Roads In JGShining's Kingdom
- HDU1025 Constructing Roads In JGShining's Kingdom
- hdu1025 Constructing Roads In JGShining's Kingdom
- HDU1025 Constructing Roads In JGShining's Kingdom
- hdu1025 Constructing Roads In JGShining's Kingdom
- HDU1025 Constructing Roads In JGShining's Kingdom
- hdu1025 Constructing Roads In JGShining's Kingdom
- hdu1025 Constructing Roads In JGShining's Kingdom
- hdu1025 Constructing Roads In JGShining's Kingdom
- HDU1025 Constructing Roads In JGShining's Kingdom
- HDU1025:Constructing Roads In JGShining's Kingdom(LIS)
- hdu1025 Constructing Roads In JGShining's Kingdom (nlogn的LIS)
- hdu1025 Constructing Roads In JGShining's Kingdom(二分+dp)
- hdu1025 Constructing Roads In JGShining's Kingdom(DP+二分)
- HDU1025:Constructing Roads In JGShining's Kingdom(LIS(dp+二分))
- Maximum Depth of Binary Tree
- matlab IIr C语言实现
- Oracle Type介绍
- 生活记录:从今天开始记录每天的学习和进步
- Map中根据value值的大小进行排序
- hdu1025 Constructing Roads In JGShining's Kingdom
- Ubuntu server版更新系统时间
- #define的其他用法
- 进程和线程
- cocos2dx-sprite的用法
- First Date
- RelativeLayout常用属性介绍
- cocos2dx之音乐滑动开关
- 【我的安卓开发之路】一日目:创建工程,进入xml