• <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
            題目大意是給你一個數 n (1<=n <= 1017), 現在可以重排 n 的數位,尋找一種排列使得其能夠整除 17。

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

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



            附錄 一: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 }

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

            Copyright © 王之昊

            久久夜色精品国产噜噜麻豆| 精品久久久久久久久免费影院| 亚洲中文字幕无码久久精品1 | 久久高清一级毛片| 伊人久久大香线蕉成人| 久久99热狠狠色精品一区| 欧美久久久久久精选9999| 亚洲国产日韩欧美久久| 久久精品国产亚洲7777| 精品无码人妻久久久久久| 性做久久久久久久久浪潮| 久久人人爽人人爽人人AV| 欧美久久久久久精选9999| 色诱久久久久综合网ywww| 久久99精品九九九久久婷婷| 久久无码人妻一区二区三区| 国产精品免费看久久久香蕉| 99久久精品九九亚洲精品| 久久精品国产91久久综合麻豆自制 | 囯产精品久久久久久久久蜜桃| 精品久久久久中文字幕日本| 99999久久久久久亚洲| 国产69精品久久久久777| 亚洲国产精品成人AV无码久久综合影院| 久久香蕉国产线看观看精品yw| 久久久久久国产精品无码下载| 91麻豆精品国产91久久久久久 | 一本伊大人香蕉久久网手机| 午夜久久久久久禁播电影| 一本色道久久88—综合亚洲精品| 久久99精品国产99久久6| 一级做a爱片久久毛片| 中文字幕久久欲求不满| 99久久精品久久久久久清纯| 91久久福利国产成人精品| 青青国产成人久久91网| 午夜福利91久久福利| 久久综合精品国产一区二区三区| 久久亚洲AV无码西西人体| 久久影视国产亚洲| 狠狠色丁香婷婷久久综合五月|