いくつかのLEGOプラスチックレンガがあります。すべてのレンガは1x1x1です。また、1xN(N < = 80)のタイルが1つあり、その上にLEGOレンガを置く必要があります。シーケンスを順番に並べることができます(連続したレンガが3つ以上ある場合は1つのシーケンスが正しい)。また、2つのシーケンスの間に少なくとも1つの空きスペースが必要です。あなたはタイルにレンガを置くことができる異なる組み合わせの数を計算する必要があります。ここでLEGOプラスチックレンガとの組み合わせ数C++
は例です:
タイルが1x7の場合は、17種類の組み合わせがあります。
入力:7 出力:あなたは何のレンガを持っていない場合は17
pic of the example http://mendo.mk/task_files/kocki.gif
また、それは1つの組み合わせとしてカウントされます。
私はこの問題に取り組みました。タイルの最大長さが14(3シーケンス)である場合の可能な組み合わせを計算する方法を発見しました。 forループを使って見つけました。
私の最大の問題は、実行する必要があるforループの膨大な数です。たとえば、1シーケンスの場合は1つのループを使用し、2つのシーケンスの場合2つのループ+ 1の場合は1つのsequnce ...したがって、80のレンガをすべて使用すると、20シーケンスを作成できます。巨大な数。だから、私はそれらを1つに入れ子にしてもいい。私はそれを試して、それは乱雑になり、それは正解を与えていない。
新コード:
#include <iostream>
using namespace std;
int main()
{
long long int places, combinations = 1;
cin >> places;
long long int f[80], g[80];
f[0] = 0;
f[1] = 0;
f[2] = 0;
g[0] = 1;
g[1] = 1;
g[2] = 1;
for(int i = 3; i<=places; i++)
{
f[i] = f[i-1] + g[i-3];
g[i] = f[i-1] + g[i-1];
}
combinations = f[places] + g[places];
cout << combinations;
return 0;
}
あなたは魔法使いを使うことができます。一度だけこれをやり直す必要があります。何度も何度もクラスを使用してください。 –
それは私を助け、私はクラスとのexpirienceを持っていないので、少しの例を投稿してください。あなたが1シーケンスのアルゴリズムが2のものと異なっていることに気付かなかったならば、 – Stefan4024
あなたはこれを説明できますか? 'また、2つのシーケンスの間に少なくとも1つの空きスペースが必要です。 'あなたの例では、次の例のXでこの文 – Abhijit