【Lcez学校第3テストT1] [説明]フォルダ

//これは実際にはカトレアの数であります

AJHビルディングブロック

[問題の説明]

AJHあまりにも多くの食べ物ので、ので、彼は唯一の方法は、ブロックを構築する時間を過ごすために使用されます。
AJHは天のベン神の死の後に来た、我々はすべて知っている、唯一の神は神ベンベン天国に入ることができるが、唯一のこんにゃくコンニャク
こんにゃく地獄ので、彼は神ベン天国に入るためには、テストに合格する必要があります。このとき、天の_rqyのベン神がもたらした管理者
のボックスは、ノートは上があった。この場合にはそこに異なるサイズの無限の数がありますが、すべては、長方形のプロットの正の整数辺の長さである
ビルディングブロックされているそれぞれの木の、無限の数がありますが、今、あなたはn個の構築ブロック内の1を選択する必要があります、の避難所は、n層辞任しました。
この問題は、もちろん賢いAJHに勝るものはありません、彼は最終的に神ベンの楽園に入る、ベンは神になりました。
今ベンAJH神はあなたにテストを与えるために、彼は言った:「法律は、私は神が走ったことを可能にするこの質問に答えてください、どのように多くのテイクの異なる種類の
、それは法律がかかる場合がありますので、それをたくさんするので、それはの19260817で割って教えてください?それは! "

[入力形式]

数n

[出力形式]

いくつかの異なる方法を取る表す整数ライン出力。AJHが病気に大きな数字を見ているので、あなたが失う
19260817の部門の法の残りを取るの数を。

[サンプル入力】

3

[サンプル出力]

5

サンプル[解説]

法律を取る図に示すように、5種類があります。

スケールデータと[合意]

データの100%まで、0 <n≤20

ソリューション

解決するために、例えば
、N = 4の場合
、いくつかの状況が存在している

プログラムの数を乗じ、紫フィラーブロックは、2つの部分に分割された紫色のブロック内に充填されています、。
以上、この解決策
コードこの方法:

for(int i=4;i<=n;i++)
{
    for(int j=1;j<=i;j++)//紫块的宽度
    {
        f[i]+=f[j-1]*f[i-j];f[i]%=MOD;
    }
}

私はの死を求めるにはどうすればよいです

//スタートがfを与えるべきではありません[4]初期値
// 19260817 19260817ロングロングがオープンする*乗算、そこにある
時間を節約するために私のサブのために、(実際には、この時間は完全州、また間違っ州ではありません)//パリティは、
その後かなりのサブ間違っに、理解していません。実際には、2特別奇数で判断し、その後私は偶数に従事なったされていない
私は/ 2 =取られていないので、時間jで偶数と誤解に間違っにより、ライン29を行きます

コード

#include <cmath>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MOD 19260817
//一开始不应该给f[4]赋初值
//有乘法,19260817*19260817要开long long
//为了省时间(其实这个时间是完全不用省的,省了还错),对i分了奇偶,
//但当时搞的不是太明白, 给分错了。其实是奇数时特判不用乘2,但我当时搞成了偶数 
//并且这样错下去,由于错误地理解为偶数,第29行当时j就没取=i/2 

using namespace std;
long long f[30], n;//
int main()
{
//  freopen("block.in","r",stdin);
//  freopen("block.out","w",stdout);
    cin >> n;
    f[0]=1;
    f[1]=1;
    f[2]=2;
    f[3]=5;
//  f[4]=14;
    for(int i=4;i<=n;i++){
        if(i%2==1){// 
            for(int j=1;j<=i/2;j++){
                f[i]+=f[i-j]*f[j-1]*2;
                f[i]%=MOD;
            }
            f[i]+=f[i/2]*f[i/2];
            f[i]%=MOD;
        }
        else{
            for(int j=1;j<=i/2;j++){
                f[i]+=f[i-j]*f[j-1]*2;
                f[i]%=MOD;
            }
        }
    }
    cout  << f[n] << endl;
    return 0;
}

おすすめ

転載: www.cnblogs.com/ZhengkunJia/p/12481856.html