hdu acm 1051 贪心,排序,dilworth定理,最长递减序列长度
来源:互联网 发布:mac打开终端快捷键 编辑:程序博客网 时间:2024/05/18 11:48
dilworth 定理: 最小链划分数 = 最大反链的长度。
于是先按照l 或者 w 排序, 再求最大递减子序列的长度即可~
要注意,第一次按照 l 排序时(按w 思路也一样),如果出现l相同的情况, 那么应该再在l相同的木头之间比较w, 并且把w最小的木头放在前面。
如: ( l , w ) = (5,3) (5,2 ) (5, 1) 则要排成 (5,1) (5,2) (5,3)。
#include<iostream>using namespace std;int l[5002];int w[5002];int ln[5002];int T;inline void swap_(int &a, int &b){int tmp;tmp = a;a = b;b = tmp;}void fast_sort(int top, int bot){if(top < bot){int j = top;for(int i = top ; i < bot ; i ++){if(l[i] < l[bot]){swap_(l[i],l[j]);swap_(w[i],w[j]);j++;}else if(l[i]==l[bot] && w[i]<w[bot]){swap_(w[i],w[bot]);}}swap_(l[j],l[bot]);swap_(w[j],w[bot]);fast_sort(top,j-1);fast_sort(j+1,bot);}}int ln_len(const int &n_){int len = 0;for(int i = 0 ; i < n_ ; i++){int top = 1;int bot = len;int mid;while(top <= bot){mid = (top+bot)/2;if( ln[mid] > w[i])top = mid+1;else bot = mid-1;}ln[top] = w[i];if(top > len)len++;}return len;}int main(){int n,res;ln[0] = 10001;scanf("%d",&T);while(T){scanf("%d",&n);for(int i = 0 ; i < n ; i++)scanf("%d%d",&l[i],&w[i]);fast_sort(0,n-1);res = ln_len(n);printf("%d\n",res);T--;}return 0;}
0 0
- hdu acm 1051 贪心,排序,dilworth定理,最长递减序列长度
- pta L2-014. 列车调度 Dilworth定理(最少下降子序列数等于最长上升子序列长度)@
- HDU 1257 最少拦截系统 (贪心---求最长递减序列(不连续的))
- ACM--木头序列--贪心+递减子序列--HDOJ 1051--Wooden Sticks
- 导弹拦截(最长单调子序列二分优化)(Dilworth偏序对定理)
- Luogu-p1020导弹拦截(最长上升子序列 Dilworth定理)
- Hdu 5256 序列变换【最长不递减序列】
- 求最长不增子序列、最长单调递减子序列、最长不降子序列、最长单调递增子序列长度
- POJ 1065 贪心算法(Dilworth定理)
- Dilworth定理(DP互转贪心)
- 最长递减子序列
- 最长递减子序列
- 最长递减子序列
- 最长递减子序列
- 最长递减子序列
- UESTC-1006 最长上升子序列(最长递减子序列做法+贪心策略)
- 序列的最长递减序列
- hdu 1069 Monkey and Banana(最长递减子序列 )
- Android Layout
- PAT 数据结构集 4-05 家谱处理
- uploadify图片上传插件使用实例
- HttpClient模拟登陆例子
- MyEclipse开发Web项目发布到Tomcat下的Root目录
- hdu acm 1051 贪心,排序,dilworth定理,最长递减序列长度
- Cocos2d-X 使用CCTableView创建滚动视图
- 中断函数参数深入分析总结
- hdu 4983 线段树+斐波那契数
- Mina框架研究(2)
- 操作系统链表应用(之页帧管理)
- js求任意元素的绝对位置
- Oracle数据库常用经典查询
- jQuery底部带导航的图片切换,定时上下滚动效果(无滚轮切换效果)