タイトルサーチが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); }