//これは実際にはカトレアの数であります
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;
}