Program to count number of perfect squares are added up to form a number in C++

Server Side ProgrammingProgrammingC++

Suppose we have a positive number n, we have to find the least number of perfect square numbers whose sum is same as n. So if the number is 10, then the output is 2, as the numbers are 10 = 9 + 1.

To solve this, we will follow these steps −

  • create one table for dynamic programming, of length n + 1, and fill it with infinity
  • dp[0] := 0
  • for i := 1, when i*i <= n
    • x = i * i
    • for j := x to n
      • dp[j] := minimum of dp[j] and 1 + dp[j – x]
  • return dp[n]

Let us see the following implementation to get better understanding −

Example

 Live Demo

#include<bits/stdc++.h>
using namespace std;
#define INF 1e9
class Solution {
public:
   int solve(int n) {
      vector < int > dp(n+1,INF);
      dp[0] = 0;
      for(int i =1;i*i<=n;i++){
         int x = i*i;
         for(int j = x;j<=n;j++){
            dp[j] = min(dp[j],1+dp[j-x]);
         }
      }
      return dp[n];
   }
};
main(){
   Solution ob;
   cout << ob.solve(10);
}

Input

10

Output

2
raja
Published on 20-Oct-2020 07:37:07
Advertisements