• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            M.J的blog

            algorithm,ACM-ICPC
            隨筆 - 39, 文章 - 11, 評論 - 20, 引用 - 0
            數(shù)據(jù)加載中……

            Dilworth定理及相關(guān)題目

            偏序集的兩個定理:
            定理1) 令(X,≤)是一個有限偏序集,并令r是其最大鏈的大小。則X可以被劃分成r個但不能再少的反鏈。
            其對偶定理稱為Dilworth定理:
            定理2) 令(X,≤)是一個有限偏序集,并令m是反鏈的最大的大小。則X可以被劃分成m個但不能再少的鏈。
             即:鏈的最少劃分數(shù)=反鏈的最長長度
            相關(guān)的題目有pku 1065,pku 3636,pku 1548
            POJ 3636:
            #include<iostream>
            #include
            <algorithm>
            #define M 20002
            using namespace std;
            struct Node{
                
            int h,w;
            }
            a[M];
            int tail[M],n;
            void LIS(int n){
                
            int i,j,m,len,mid,low,high;
                len
            =1;tail[1]=a[1].h;
                
            for(i=2;i<=n;i++){
                    
            if(tail[len]<=a[i].h) {
                        len
            ++;
                        tail[len]
            =a[i].h;
                    }

                    
            else{
                        low
            =1;high=len; 
                        
            while(low<high){
                            mid
            =(low+high)/2;
                            
            if(a[i].h>=tail[mid]) low=mid+1;
                            
            else high=mid;
                        }

                        tail[low]
            =a[i].h;
                    }

                }
                                
                printf(
            "%d\n",len);      
            }

            bool cmp(Node a,Node b){
                
            if(a.w!=b.w)return a.w>b.w;
                
            else return a.h<b.h;
            }

            int main()
            {
                
            int i,j,k,cas;
                scanf(
            "%d",&cas);    
                
            while(cas--){
                    scanf(
            "%d",&n);
                    
            for(i=1;i<=n;i++)
                        scanf(
            "%d%d",&a[i].w,&a[i].h);
                    sort(a
            +1,a+1+n,cmp);
                    LIS(n);
                }

                
            //system("pause");
                return 0;
            }
            POJ  1548:
            #include<iostream>
            #include
            <algorithm>
            using namespace std;
            int k,a[700],tail[800],b[860];
            void LIS(){
                
            int i,j,m,n,len,mid,left,right;
                n
            =1;
                
            for(i=k-1;i>=1;i--) b[n++]=a[i];
                n
            --;
                len
            =1;tail[1]=b[1];
                
            for(i=2;i<=n;++i){
                    
            if(b[i]>tail[len]){
                        len
            ++;
                        tail[len]
            =b[i];
                    }

                    
            else{
                        left
            =1;right=len;
                        
            while(left<right){              //二分查找插入的位置 
                            mid=(left+right)/2;
                            
            if(tail[mid]<b[i]) left=mid+1;
                                
            else  right=mid;
                            }

                        tail[left]
            =b[i];                //插入 
                    }
             
                }
                                
                printf(
            "%d\n",len);      
            }

            int main()
            {
                
            int i,j,m,n;
                
            while(1){
                    k
            =1;
                    scanf(
            "%d%d",&i,&j);
                    
            if(i==-1&&j==-1break;
                    a[k
            ++]=j;
                    
            while(scanf("%d%d",&i,&j)){
                        
            if(i==0&&j==0 ){
                            LIS();
                            
            break;        
                        }

                        a[k
            ++]=j;
                    }
                
                }

            }

            posted on 2010-05-28 18:35 M.J 閱讀(1088) 評論(0)  編輯 收藏 引用

            无码精品久久久久久人妻中字| 久久人人爽人爽人人爽av| 久久亚洲精品成人无码网站| 久久久久亚洲AV无码专区网站 | 国产精品gz久久久| 久久综合伊人77777| 久久亚洲私人国产精品vA | 中文字幕久久欲求不满| 久久影院午夜理论片无码| 久久久精品国产sm调教网站 | 国产精品日韩深夜福利久久| 亚洲一级Av无码毛片久久精品| 久久精品国产网红主播| 久久人妻少妇嫩草AV无码蜜桃| 亚洲va久久久噜噜噜久久天堂| 国产精品日韩欧美久久综合| 久久人人妻人人爽人人爽| 久久久久亚洲AV成人网人人网站| 国产美女久久精品香蕉69| 亚洲国产成人久久综合碰| 久久本道伊人久久| 久久久女人与动物群交毛片| 久久久久久久精品妇女99| 国内精品伊人久久久久网站| 久久99精品久久久久久| 色综合久久久久久久久五月| 久久久这里只有精品加勒比| 久久精品国产亚洲Aⅴ蜜臀色欲| 欧美精品一区二区精品久久| 狼狼综合久久久久综合网| 久久久久久精品免费免费自慰| 麻豆国内精品久久久久久| 国产精品成人精品久久久| 一本一道久久精品综合| 91精品国产综合久久香蕉 | 99久久国产亚洲高清观看2024| 国产精品无码久久综合| 韩国免费A级毛片久久| 久久久久99精品成人片试看| 精品国产乱码久久久久久郑州公司| 久久水蜜桃亚洲av无码精品麻豆|