알고리즘/BaekJoon

[c++] 17626번 : Four Squares

__jhp_+ 2022. 10. 4. 14:39

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

 

17626번: Four Squares

라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1

www.acmicpc.net

#include <iostream>
using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int dp[50001] = { 0, };
	int n, j, cnt = 0;
	cin >> n;
	dp[0] = 0;
	dp[1] = 1;

	for (int i = 2; i <= n; ++i)
	{
		dp[i] = dp[i - 1];
		for (int j = 1; j * j <= i; ++j)
		{
			dp[i] = dp[i] < dp[i - j * j] ? dp[i] : dp[i - j * j];
		}
		dp[i]++;
	}

	cout << dp[n] << '\n';
	return 0;
}