쿠쿠의기록

16. 제곱수의 합 본문

알고리즘/L16~17 동적계획법

16. 제곱수의 합

쿠쿠트레인 2022. 3. 14. 13:40

입력


첫 번째 줄에 N이 주어진다. ( 1 ≤ N ≤ 100,000 )  

출력


필요한 제곱 수의 최소 개수를 출력한다.

 

예제 입력

45

예제 출력

2

 

예제 입력

38

예제 출력

3
#include <stdio.h>
#include <algorithm>

using namespace std;

const int MAX = 100010;

int n;
int arr[MAX];
int d[MAX];

int main() {

  scanf("%d",&n);
  
  for(int i=0;i<=n;i++){
    d[i] = i;
  }
  
  for(int i=2;i<=n;i++){
    //printf("%d\n",i);
    
    for(int j=2;j*j<=i;j++){
      d[i] = min(d[i],d[i-j*j]+1);
      
      //printf("%d ",d[i]);
    }
    
    //printf("\n\n");
  }
  
  printf("%d",d[n]);
  return 0;
}

'알고리즘 > L16~17 동적계획법' 카테고리의 다른 글

17. 연속 부분 최대합 L  (0) 2023.06.13
17. 자원 채취  (0) 2023.06.12
16. 직사각형배치의경우의수  (0) 2022.03.14
16. 버튼누르기  (0) 2022.03.14
16. 카드놀이  (0) 2022.03.14