• <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>
            隨筆-72  評論-126  文章-0  trackbacks-0
            http://acm.hdu.edu.cn/showproblem.php?pid=2269
            很好的運用了位運算。。。三進制狀態壓縮。。

            #include<stdio.h>
            #include
            <string>
            char hash[177148]={0};
            char thing[11][21];
            int n;
            struct Q{
                
            short int tep,b,c;
            }q[
            177148];
            int head,tail,empty,K=1;
            int ku[] = {1,3,9,27,81,243,729,2187,6561,19683,59049};
            int ku2[] = {1,2,4,8,16,32,64,128,256,512,1024};
            bool eat[2048];
            bool flag;
            int maxt,a,b,c;

            int find(char a[]) {
                
            int i;
                
            for(i=0;i<n;i++)
                    
            if(strcmp(a,thing[i])==0)
                        
            return i;
                
            return -1;
            }
            void GetEat()
            {
                
            char buf[11],str[999];
                
            int i,j,a,num=0;
                j 
            = 0;
                gets(str);
                
            for(i=0;str[i];i++)
                {
                    
            if(str[i]==' ')
                    {
                        buf[j] 
            = 0;
                        j 
            = 0;
                        a 
            = find(buf);
                        
            if(a>=0)
                            num 
            += ku2[a];
                    }
                    
            else
                        buf[j
            ++= str[i];
                }
                buf[j] 
            = 0;
                a 
            = find(buf);
                
            if(a>=0)
                    num 
            += ku2[a];

                
            int max = (1<<n)-1;
                
            for(i=num;i<=max;i++)
                    
            if((i&num)==num)
                        eat[i] 
            = true;
            }
            bool _hash(int b,int c)
            {
                
            int i;
                
            int sum = 0;
                
            for(i=0;i<&& (b||c);i++)
                {
                    sum 
            += (b&1)*ku[i] + (c&1)*ku[i]*2;
                    b 
            >>= 1;
                    c 
            >>= 1;
                }
                
            if(hash[sum]!=K) {
                    hash[sum] 
            = K;
                    
            return true;
                }
                
            return false;
            }
            void dfs(int start,int maxt,int &x)
            {
                
            if(maxt<0)
                    
            return ;
                
            if(!eat[x] && _hash(b,c))
                {
                    tail 
            ++;
                    q[tail].b 
            = b;
                    q[tail].c 
            = c;
                    q[tail].tep 
            = q[head].tep + 1;
                }
                
            if(maxt==0)
                    
            return ;
                
            for(int i=start;i<n;i++)
                {
                    
            int k = 1<<i;
                    
            if((x&k)==k)
                    {
                        x 
            -= k;
                        b 
            += k;
                        
            if(c==0)
                            flag 
            = true;
                        dfs(i
            +1,maxt-1,x);
                        
            if(flag)
                            
            return ;
                        b 
            -= k;
                        x 
            += k;
                    }
                }
            }
            int bfs()
            {
                head 
            = tail = 0;
                q[head].b 
            = 0;
                q[head].c 
            = (1<<n) - 1;
                q[head].tep 
            = 0;
                flag 
            = false;
                
            while(head <= tail)
                {
                    a 
            = (1<<n) - 1;
                    b 
            = q[head].b;
                    c 
            = q[head].c;
                    a 
            ^= (b|c);
                    
            if(q[head].tep&1) {
                        a 
            = a|b;
                        b 
            = 0;
                        dfs(
            0,maxt,a);
                    }
                    
            else {
                        c 
            = c|b;
                        b 
            = 0;
                        dfs(
            0,maxt,c);
                    }
                    
            if(flag)
                        
            return q[head].tep + 1;
                    head 
            ++;
                }
                
            return -1;
            }
            int main()
            {
                
            int m,i;
                
            while(scanf("%d%d%d",&n,&m,&maxt)==3)
                {
                    
            for(i=0;i<n;i++)
                        scanf(
            "%s",thing[i]);
                    getchar();
                    memset(eat,
            false,sizeof(eat));
                    
            for(i=0;i<m;i++)
                        GetEat();
                    
            if(maxt>=n) {
                        puts(
            "1");
                        
            continue;
                    }
                    printf(
            "%d\n",bfs());
                    K 
            ++;
                }
                
            return 0;
            }


            posted on 2009-03-22 10:05 shǎ崽 閱讀(302) 評論(0)  編輯 收藏 引用
            嫩草影院久久国产精品| 欧美久久久久久午夜精品| 99久久精品国内| 激情五月综合综合久久69| 色妞色综合久久夜夜| 久久不射电影网| 色播久久人人爽人人爽人人片AV| 国产成人无码久久久精品一| 久久久综合香蕉尹人综合网| 日韩久久久久久中文人妻| 久久精品亚洲福利| 久久婷婷五月综合97色一本一本| 精品久久久久久国产牛牛app| 精品无码久久久久国产动漫3d| 久久久久中文字幕| 色狠狠久久AV五月综合| 狠狠久久综合| 婷婷久久综合九色综合98| 奇米综合四色77777久久| 婷婷久久综合九色综合绿巨人| 久久99精品综合国产首页| 国色天香久久久久久久小说| 久久久久久久久久久免费精品 | 青青热久久综合网伊人| 久久精品国产免费观看| 久久嫩草影院免费看夜色| 成人精品一区二区久久久| 久久国产色AV免费看| 奇米影视7777久久精品| 亚洲人成伊人成综合网久久久| 思思久久好好热精品国产| 国产精品无码久久综合网| 国产成人精品久久一区二区三区av| 久久久无码人妻精品无码| 亚洲精品白浆高清久久久久久 | 伊人久久无码精品中文字幕| 久久99热国产这有精品| 久久免费小视频| 99久久亚洲综合精品网站| 久久青草国产手机看片福利盒子 | 日韩美女18网站久久精品|