본문 바로가기
백준 알고리즘/다이나믹 프로그래밍

백준 1699번 C++

by paysmile 2019. 1. 21.

#include<iostream>

#include<cstring>

#include<cmath>

using namespace std;


const int MAX = 100001;


int n;

int sumcount[MAX];


int minnum() {


for (int i = 2; i <= n; i++) {

if (sumcount[i] == 1)

continue;

int result = 987654321;

for (int j = (int)sqrt(i); j >= 1; j--){

int mins = 1 + sumcount[i - (j*j)];

if (result > mins) {

result = mins;

sumcount[i] = result;

}

}

}

return sumcount[n];

}


int main(void) {

cin >> n;


memset(sumcount, 0, sizeof(sumcount));

for (int i = 1; pow(i, 2) <= n; i++) {

sumcount[i*i] = 1;

}


cout << minnum();

}

'백준 알고리즘 > 다이나믹 프로그래밍' 카테고리의 다른 글

백준 11051번 C++  (0) 2019.01.21
백준 11055번 C++  (0) 2019.01.21
백준 11048번 C++  (0) 2019.01.18
백준 2167번 C++  (0) 2019.01.17
백준 11057번 C++  (0) 2019.01.17