• <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 © 王之昊

            国内精品久久久久久麻豆| 蜜臀av性久久久久蜜臀aⅴ| 久久99精品久久久久久| 91久久精品视频| 久久久久久精品久久久久| 麻豆AV一区二区三区久久| 久久精品国产福利国产琪琪| 精品久久久无码人妻中文字幕| 精品免费久久久久久久| 欧美激情精品久久久久久久九九九| 国产精品久久新婚兰兰| 国产精品久久久久久福利漫画| 性做久久久久久免费观看| 久久综合噜噜激激的五月天| 久久精品国产99久久丝袜| 国内精品久久久久久99蜜桃| 久久久久久国产a免费观看不卡 | 久久精品99无色码中文字幕| 性做久久久久久免费观看| 久久精品国产91久久麻豆自制| 少妇无套内谢久久久久| 久久福利片| 91麻精品国产91久久久久| 国产精品久久久久影院嫩草| 97久久婷婷五月综合色d啪蜜芽| 99久久精品免费国产大片| 男女久久久国产一区二区三区| 中文字幕久久精品| 色天使久久综合网天天| 超级碰久久免费公开视频| 99久久成人国产精品免费| 亚洲国产精品无码久久久秋霞2| 伊人久久大香线蕉精品不卡| 久久亚洲AV无码西西人体| 久久精品亚洲精品国产欧美| 青青青青久久精品国产| 久久免费国产精品一区二区| 精品一区二区久久| 精品久久久久久久久久久久久久久| 久久亚洲精品视频| 国产精品综合久久第一页|