Даалуу

Бодолт

Эхлээд хамгийн эхний нөхцөлийг хасаад бодож үзье. Өөрөөр хэлбэл хөлөг дээр ганц ч даалуу байхгүй байх үеийг хариу мөн гэж тооцоод хөлөг хэмжээтэй байх үеийн хариуг хувьсагчид хадгалъя.

Тэгвэл -уудыг олсон гэж үзээд үеийн хариуг ольё. Энэ нь нүдэн дээр даалуу тавьсан болон тавиагүй гэж нөхцөл сална. нүдэн дээр даалуу тавиагүй үед үетэй адилхан тул янзын боломжтой. нүдэн дээр даалуу тавьсан үед дахь дүрмийн дагуу дахь нүдэнд даалуу тавьж болохгүй тул эхний нүдэн дээр даалуу тавих боломж болон дэх нүдэнд даалуу тавих боломжийн тоонуудын үржвэр буюу болно. Эндээс гэсэн томъё гарна. Энэ хариу нь үндсэн бодлого дээр хөлөг хоосон байх гэсэн нэг тохиолдлыг нэмсэн гэдгийг санавал үндсэн бодлогын хариу болно.

Дээр гаргасан томьёог харвал бид дурын -ийн хувьд өмнөх 2 үеийг нь мэдэж байвал бодлогын хариуг олж болох тул болон гэсэн бага утгуудыг бодож олоод үлдсэн утгуудыг давталт ашиглан хялбархан олж болно. Гэвч үед нь хэт том тоо болох тул C болон C++ хэлний ямар ч төрлийн хувьсагчид(1-р олимпиадын бага ангийн илэрхийлэл бодлогын анализыг харна уу) утгыг хадгалах боломжгүй тул тоог цифр цифрээр салган хүснэгтэд хадгалан тэдгээр дээрээ үржих болон нэмэх үйлдлийг гүйцэтгэх шаардлагатай үүнийг өөрөө хийж сураасай гэж хүсэж байгаа учраас бичилгүй орхиё.

Код

#include <iostream> using namespace std; long long a[31]; int main() { int n, i; if(n <= 30) { a[0] = 1LL; a[1] = 2LL; for(i = 2; i <= n; i++) { a[i] = a[i - 1] + (long long)(i + 1) * a[i - 2]; } cout << a[n] << endl; } else { /* n=31 үеийн бодолтыг энд хийнэ үү! */ } return 0; }