• <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>

            sgu 502

            Posted on 2010-12-07 18:23 王之昊 閱讀(391) 評論(0)  編輯 收藏 引用 所屬分類: sgu
            題目大意是給你一個數(shù) n (1<=n <= 1017), 現(xiàn)在可以重排 n 的數(shù)位,尋找一種排列使得其能夠整除 17。

            開始寫了一個集合DP的代碼。結(jié)果TLE,感覺比較奇怪,算復雜度是17*17*(2^17)=3千多萬。不過過了300+的人,做到這里就感覺自己做復雜了。

            后來才發(fā)現(xiàn)直接搜可以跑到52ms,不過到現(xiàn)在還是不會估計搜索的效率。只是感覺搜索很強大。



            附錄 一:TLE代碼(集合DP)
             1 import java.util.Scanner;
             2 
             3 class Permutation{
             4     int []digits;
             5     int [][]visit;
             6     int size;
             7     
             8     void read(){
             9         Scanner sc = new Scanner(System.in);
            10         String str = sc.next();
            11         digits = new int[str.length()];
            12         for(int i = 0; i < str.length(); i++)
            13             digits[i] = str.charAt(i) - '0';
            14     
            15         size = 1 << digits.length;
            16         visit = new int[size][17];
            17         for(int i = 0; i < size; i++)
            18             for(int j = 0; j < 17; j++){
            19                 visit[i][j] = -1;
            20             }
            21     }
            22     
            23     boolean find(int a, int b){
            24         
            25         if(a==0)return b==0;
            26         
            27         if(visit[a][b] == 0)return false;
            28         if(visit[a][b] == 1)return true;
            29             
            30         for(int i = 0; i < digits.length; i++){
            31             if( ( (1<<i) & a ) == 0)continue;
            32             
            33             int na = a ^ (1<<i);
            34             int nb = (17 + b - digits[i]) * 12 % 17;
            35             if(na == 0 && digits[i] == 0continue;
            36             
            37             if( find( na, nb) ){
            38                 visit[a][b] = 1;
            39                 return true;
            40             }
            41         }
            42         
            43         visit[a][b] = 0;
            44         return false;
            45     }
            46     
            47     void print(int a, int b){
            48         if( a == 0)return;
            49         for(int i = 0; i < digits.length; i++){
            50             if( ( (1<<i) & a ) == 0)continue;
            51             
            52             int na = a ^ (1<<i);
            53             int nb = (17 + b - digits[i]) * 12 % 17;
            54             if(na == 0 && digits[i] == 0continue;
            55             
            56             if( find( na, nb) ){
            57                 print(na, nb);
            58                 System.out.print(digits[i]);
            59                 break;
            60             }
            61         }
            62     }
            63     
            64     void work(){
            65         if( find(size-10) )
            66         {
            67             print(size-10);
            68             System.out.println();
            69         }
            70         else
            71             System.out.println(-1);
            72     }
            73 }
            74 
            75 public class Solution{
            76     public static void main(String[] args)throws Exception{
            77         Permutation P = new Permutation();
            78         P.read();
            79         P.work();
            80     }    
            81 }

            附錄二:Accept代碼(dfs)
             1 import java.util.Scanner;
             2 import java.util.Arrays;
             3 class Permutation{
             4     int []digits;
             5     int []ans;
             6     static int size = 10;
             7     
             8     void read(){
             9         Scanner sc = new Scanner(System.in);
            10         String str = sc.next();
            11         
            12         ans = new int[ str.length() ];
            13         digits = new int[size];
            14         Arrays.fill(digits, 0);
            15         
            16         for(int i = 0; i < str.length(); i++)
            17             digits[ str.charAt(i) - '0' ] ++ ;
            18     }
            19     
            20     boolean dfs(int len, int res){
            21         if(len == ans.length)return res == 0;
            22         
            23         for(int i = 0; i < size; i++){
            24             if(i==0 && len == 0)continue;
            25             if(digits[i] > 0){
            26                 digits[i]--;
            27                 
            28                 ans[len] = i;
            29                 if(dfs(len+1, (res*10 + i) % 17) )return true;
            30                 
            31                 digits[i]++;
            32             }
            33         }
            34         return false;
            35     }
            36     
            37     void work(){
            38         if( dfs(00) ){
            39             for(int i = 0; i < ans.length; i++)
            40                 System.out.print(ans[i]);
            41             System.out.println();
            42         }
            43         else
            44             System.out.println(-1);
            45     }
            46 }
            47 
            48 public class Solution{
            49     public static void main(String[] args)throws Exception{
            50         Permutation P = new Permutation();
            51         P.read();
            52         P.work();
            53     }    
            54 }


            只有注冊用戶登錄后才能發(fā)表評論。
            相關(guān)文章:
            網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            posts - 26, comments - 7, trackbacks - 0, articles - 17

            Copyright © 王之昊

            欧美噜噜久久久XXX| 久久久久久久97| 日韩久久久久久中文人妻| 老男人久久青草av高清| 久久露脸国产精品| 性高湖久久久久久久久AAAAA| 国产综合久久久久久鬼色| 久久人人爽人人爽人人片AV不| 精品久久久久久无码专区| 狠狠色婷婷久久一区二区| 狠狠色丁香久久婷婷综合图片 | 亚洲国产成人久久综合一| 国产亚洲精久久久久久无码| 久久丫精品国产亚洲av| 性做久久久久久久| 99久久99久久精品免费看蜜桃| 囯产极品美女高潮无套久久久 | 99热成人精品热久久669| 激情综合色综合久久综合| 香蕉久久永久视频| 中文无码久久精品| 久久天堂电影网| 久久久久婷婷| 久久久久久综合网天天| 99久久精品午夜一区二区| 久久久久亚洲AV无码专区桃色| 久久久久久精品免费免费自慰| 久久亚洲精品成人AV| 97久久天天综合色天天综合色hd| 久久久久国产成人精品亚洲午夜| 久久热这里只有精品在线观看| 91精品国产91久久久久久蜜臀| 久久人人爽人人爽人人爽| 色综合久久久久无码专区| 亚洲国产精品无码久久久久久曰 | 无码超乳爆乳中文字幕久久| 国内精品久久久久久99蜜桃 | 亚洲国产成人久久综合一 | 国产亚洲婷婷香蕉久久精品| 久久久久九九精品影院| 久久精品国产亚洲av水果派|