문제 링크 : https://www.acmicpc.net/problem/1699
알고리즘
문제는 어렵지않은 DP문제이다 .
동전 2문제처럼 작은수부터 차례로 채우고 높은수를 채울때 더 적은 갯수를 사용하는 경우를 저장 하는 방식으로 짜면 쉽게 풀린다
코드
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 | #include<iostream> #include<algorithm> using namespace std; typedef long long ll; ll n; ll arr[100001]; int main() { cin.tie(NULL); ios::sync_with_stdio(false); for (int i = 1; i <= 10000; i++)arr[i] = 1000001; cin >> n; for (int i = 1; i <= n; i++) { for (ll j = i * i; j <= n; j++) { arr[j] = min(arr[j], arr[j - i * i] + 1); } } cout << arr[n]; } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 11057: 오르막수 (0) | 2020.04.02 |
---|---|
백준 11052번: 카드 구매하기 (0) | 2020.03.25 |
백준 14503번: 로봇 청소기 (0) | 2020.03.25 |
백준 2294번: 동전 2 (0) | 2020.03.25 |
백준 11727번: 2 x n 타일링 2 (0) | 2020.03.25 |
백준 1699번: 제곱수의 합