ブルーブリッジカップ - タイリング(DFS)

問題の説明は、
  Nの長さを有する(1 <= N <= 10) 床の、与えられた二つの異なるタイル:長さ1の一種で、相互に長さ2は、数は限定されるものではありません。異なるレイの合計数で覆われ、この長さN床に?
  例えば、床の長さlay-以下の5種類の合計4:
  4 = 1 + 1 + 1 + 1
  4 = 2 + 1 + 1
  4 = 1 + 2 + 1
  4 = 1 + 1 + 2
  4 = 2 + 2
  再帰的な方法で、上記の問題を解決するためのプログラミング。
 
入力フォーマットが
  数だけNである、フローリング代表長
出力フォーマットは
  、総タイルを敷設すべての異なる方法の数を表す出力
 
サンプル入力
4
出力例を

 

問題解決のアイデア:

DFS暴力が発見されました

#pragma GCCの最適化(2)
の#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
インラインint型リード(){ int型のx = 0、F = 1チャー C = GETCHAR()。一方、(C =!' - ' &&(C < ' 0 ' || C> ' 9 '))C = GETCHAR()。もし(C == ' - ')、F = - 1、C = GETCHAR()。一方、(C> = ' 0 ' && C <= ' 9 '10 + C- ' 0 '、C = GETCHAR()。リターン F * X;} 
のtypedef 長い LL。
const  int型 MAXN = 1E5 + 10 int型のn;
int型の合計。
int型ANS;
ボイド DFS(int型の合計){
     場合(和> n)の
         リターン;
    もし(合計== N){ 
        ANS ++ リターン; 
    } 
    DFS(和 + 1 )。
    DFS(和 +2 )。
} 
int型のmain()
{ 
    CIN >> N。
    DFS(0 )。
    printf(" %dの" 、ANS)。 
    リターン 0 ; 
}
コードの表示

おすすめ

転載: www.cnblogs.com/lipu123/p/12150130.html