1 ""» 2 Учитывая положительное целое число п, найти наименьшее число совершенных квадратных чисел (например, 1, 4, 9, 16, ...), сумма которых равна п. 3 Пример 1: 4 Входной сигнал: п = 12 5 Выход: 3 6 Пояснение: 12 = 4 + 4 + 4. 7 Пример 2: 8 Входной сигнал: п = 13 9 Выход: 2 10 Пояснение: 13 = 4 + 9. 11 "" " 12 """ 13 дп [0 ] = 0 14 дп [1] = дп [0] = 1 + 1 15 дп [2] = др [1] + 1 = 2 16 дп [3] = дп [2] + 1 = 3 17 дп [4] = Мин {дп [4-1 * 1] +1, дп [4-2 * 2] + 1} 18 = Мин {дп [3] + 1, дп [0] + 1} 19 = 1 20 дп [5] = {дп Мин [5-1 * 1] +1, дп [5-2 * 2] + 1} 21 = Мин {дп [4] +1, дп [1] + 1} 22 = 2 23 . 24 . 25 . 26 дп [13] = {дп Мин [13-1 * 1] +1, дп [13-2 * 2] + 1, дп [13-3 * 3] + 1} 27 = Мин {дп [12] + 1, дп [9] + 1, дп [4] + 1} 28 = 2 29 . 30 . 31 . 32 дп [п] = {дп Мин [п - я * I] + 1}, п - я * I> = 0 && я> = 1 33 DP [п] представляет собой количество наименьших квадратов и сумма п есть (запрос). 34 DP все индексы массива полностью квадратных чисел является числом (например , 1,4,9 ...) устанавливается в 1, плюс слой траверс , чтобы найти наименьшее J комбинированную длину тока г. 35 означает , что динамическое уравнение: для каждого г, г меньше , чем полное число тех , на площади минимального числа +1 является искомой, т.е. дп [я - J * J] + 1. 36 "" " 37 [ класс Solution1: 38 DEF numSquares (Я, п): 39 ДП = [поплавок ( ' INF ' )] * (п + 1. ) 40 I = 1. 41 это время I * I <= н-: 42 ДП [ I * I] 1 =. 43 I = + 1. 44 для ввода в диапазоне (1 ,. 1 п +. ): 45 = 1 46 , а J * J <= я: 47 дп [I] = мин (дп [I], дп [IJ * J] +1 ) 48 J + 1 = 49 возврата дп [п]