#include <iostream> #include <algorithm> #include <math.h> using namespace std; int N; int dp[100010]; int solve(int num) { if(num == 0) { return 0; } if(dp[num] != 999999) { return dp[num]; } for(int i = sqrt(num); i >= 1; i--) { int squared = pow(i, 2); dp[num] = min(dp[num], solve(num-squared)+1); } return dp[num]; } int main(void) { // freopen("B1699_input.txt", "r", stdin); cin >> N; for(int i = 0; i < 100010; i++) { dp[i] = 999999; } cout << solve(N); return 0; } | cs |
'Baekjoon > DP' 카테고리의 다른 글
[백준 2225] 합분해 (DP) (C/C++) (0) | 2020.01.22 |
---|---|
[백준 2133] 타일 채우기 (DP) (C/C++) (★★★) (0) | 2020.01.21 |
[백준 2579] 계단 오르기 (DP) (C/C++) (0) | 2020.01.18 |
[백준 1912] 연속합 (DP) (C/C++) (★) (0) | 2020.01.18 |
[백준 11054] 가장 긴 바이토닉 부분 수열 (DP) (C/C++) (★★★) (0) | 2020.01.17 |