zoukankan      html  css  js  c++  java
  • hdu 5339 递归枚举

    只有20个点,从大到小排序然后枚举即可。这里做了一个优化,不模大于自己的数,因为这是徒劳的,我们要求的是最小的r。

    注意:不排序就枚举是错误的,想一想,为什么。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cstdio>
     5 using namespace std;
     6 
     7 const int INF = 99;
     8 const int N = 20;
     9 int x[N];
    10 int t, n, a, r;
    11 
    12 bool cmp( int p, int q )
    13 {
    14     return p > q;
    15 }
    16 
    17 void dfs( int d, int cur, int len )
    18 {
    19     if ( d == 0 )
    20     {
    21         r = min( r, len );
    22         return ;
    23     }
    24     if ( cur == n ) return ;
    25     if ( d >= x[cur] ) dfs( d % x[cur], cur + 1, len + 1 );    
    26     dfs( d, cur + 1, len );
    27 }
    28 
    29 int main ()
    30 {
    31     cin >> t;
    32     while ( t-- )
    33     {
    34         cin >> n >> a;
    35         for ( int i = 0; i < n; i++ )
    36         {
    37             cin >> x[i];
    38         }
    39         sort( x, x + n, cmp );
    40         r = INF;
    41         dfs( a, 0, 0 );
    42         if ( r == INF ) r = -1;
    43         cout << r << endl;
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    BETA冲刺(6/7)
    BETA冲刺(5/7)
    BETA冲刺(4/7)
    BETA冲刺(3/7)
    BETA冲刺(2/7)
    福大软工 · 第十次作业
    BETA冲刺(1/7)
    第08组 Beta版本演示
    第08组 Beta冲刺(4/4)
    第08组 Beta冲刺(3/4)
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4700139.html
Copyright © 2011-2022 走看看