На С++! Количество разбиений на слагаемые Дано натуральное число N. Найдите количество его разбиений на натуральные слагаемые. Два разбиения, отличающиеся только порядком слагаемых, будем считать за одно.

Например, для N=5 существует 7 различных разбиений:

5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
Входные данные

Задано единственное число N≤30.

Выходные данные

Выведите количество различных разбиений на слагаемые.

Примеры
Ввод
Вывод
5
7Количество разбиений на слагаемые
Дано натуральное число N. Найдите количество его разбиений на натуральные слагаемые. Два разбиения, отличающиеся только порядком слагаемых, будем считать за одно.

Например, для N=5 существует 7 различных разбиений:

5=5
5=4+1
5=3+2
5=3+1+1
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
Входные данные

Задано единственное число N≤30.

Выходные данные

Выведите количество различных разбиений на слагаемые.

Примеры
Ввод
Вывод
5
7

Oks099 Oks099    1   10.04.2021 21:21    4

Ответы
antochakakaka antochakakaka  10.04.2021 22:00

#include <stdio.h>

int d[100][100];

int dec(int n, int k) {

if ( n >= 0 && k >= 0 && d[n][k] > 0 ) return d[n][k];

if ( n < 0 ) return 0;

if ( n <= 1 || k == 1 ) return 1;

d[n][k] =  dec(n, k-1) + dec(n-k, k);  

return d[n][k];

}

int main() {

int m, i, j;

scanf("%d", &m);

for (i = 0; i < m; i++) {

  for (j = 0; j < m; j++) {

    d[i][j] = -1;

  }

}

printf("%d\n", dec(m, m));

return 0;

}

Объяснение:

там в комментариях почему-то не правильно вышло

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика