문제 링크 : https://www.acmicpc.net/problem/1699

 

15684번: 사다리 조작

사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선이 같은 위치를 갖는다. 아래 그림은 N = 5, H = 6 인 경우의 그림이고, 가로선은 없다. 초록선은 세로선을 나타내고, 초록선과 점선이 교차하는 점은 가로선을 놓을 수 있는 점이다. 가로선은 인접한 두 세로선을 연결해야 한다. 단, 두 가로선이 연속하거나 서로

www.acmicpc.net

 알고리즘 

 

문제는 어렵지않은 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
ariz1623