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

            伊人久久精品线影院| 久久久久97国产精华液好用吗| 亚洲欧美日韩精品久久亚洲区| 久久大香萑太香蕉av| 精品人妻伦九区久久AAA片69| 午夜久久久久久禁播电影| 国产精品久久久久久久久免费| 久久久艹| 国产精品久久久久无码av| 久久精品国产精品亚洲人人| 99精品久久久久久久婷婷 | 伊人久久成人成综合网222| 亚洲狠狠婷婷综合久久蜜芽 | 中文精品99久久国产| 久久精品国产亚洲欧美| 国产精品美女久久福利网站| 精品久久一区二区| 亚洲成色WWW久久网站| 久久精品国产清自在天天线| 99久久99久久| 亚洲av成人无码久久精品| 久久久WWW成人免费精品| 天天爽天天爽天天片a久久网| 内射无码专区久久亚洲| 国产精品va久久久久久久| 国产精品女同久久久久电影院| 国内精品久久久久影院老司| 久久久久久久亚洲精品| 一级做a爰片久久毛片16| 久久精品夜夜夜夜夜久久| 伊人久久大香线蕉av不卡| 久久久无码精品亚洲日韩蜜臀浪潮| 久久e热在这里只有国产中文精品99| 久久不射电影网| 久久九九亚洲精品| 久久久久久a亚洲欧洲aⅴ| 99久久99久久久精品齐齐| 久久久久人妻一区精品性色av| 伊人久久大香线蕉av一区| 欧美丰满熟妇BBB久久久| 成人妇女免费播放久久久|