ディープ検索最適化の剪定

タイトルサーチがTLEの深い、多くの多くを行っので、剪定は非常に重要である前に、どのように不必要な探索木の枝を避けるために、「予防措置をとる」するには?

例:

の数を割ます

整数nはk個の部分に、それぞれが空にすることはできません、いずれか2つが同じ(順序に関わらず)を有することができます。

たとえば、N = 7、K = 3は、以下の三つのサブ方法が同じであると考えられます。

1,1,5; 1,5,1; 5,1,1;

Q.どのように多くの異なるポイントシステム。出力整数、すなわち、異なるポイントシステム。

質問の意味は、数が1-kに増分されることを保証するために、アルゴリズムと比べて、重複数の組み合わせを分配ました

コード:

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
INTのN、M、K、S。
INT [ 10 ]。
ボイド検索(INT K){
     場合(N == 0のリターン;
    もし(Kの==の{M)
         であれば(N> = [K- 1 ]){ 
            S ++ 返します
        } 
    } 
    のためにint型 iは= [K- 1 ]; iが<= N /(M-K + 1); iは++ ){ 
        [K] = I。
        N - = I。
        検索(K + 1 )。
        N + = I。
    } 
} 
int型のmain(){ 
    scanf関数(" %D%dの"、&​​N、&M)。
    [ 0 ] = 1 ; 
    検索(1 ); 
    printf(" %dの" 、S); 
}

 

おすすめ

転載: www.cnblogs.com/648-233/p/10992971.html