기술 블로그

1699번 제곱수의 합 본문

알고리즘 문제/BOJ

1699번 제곱수의 합

parkit 2019. 12. 13. 09:18
728x90
반응형

https://www.acmicpc.net/problem/1699




knapsack(냅색) 문제







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <bits/stdc++.h>
 
using namespace std;
 
int dp[100100], n, sq;
 
int dfs(int cap, int cnt)
{
    if (cap == n) return dp[cap] = cnt;
    if (cap > n) return 2e9;
 
    int & ret = dp[cap];
    if (ret != -1return ret;
    ret = 2e9;
 
    for (int i = 1; i <= sq; i++) {
        ret = min(ret, dfs(cap + i*i, cnt + 1));
    }
 
    return ret;
}
 
int main()
{
    //freopen("C:\\Users\\park7\\Desktop\\sample_input.txt", "r", stdin);
    cin.tie(0);
    fill(dp, dp + 100100-1);
    scanf("%d"&n);
    sq = sqrt(n);
    printf("%d\n", dfs(00));
 
    return 0;
}
cs















728x90
반응형

'알고리즘 문제 > BOJ' 카테고리의 다른 글

2631번 줄세우기  (0) 2019.12.17
1300번 K번째 수  (0) 2019.12.17
2931번 가스관  (0) 2019.11.16
17780번 새로운 게임  (0) 2019.11.13
17822번 원판 돌리기  (0) 2019.11.02