Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình đếm số ô vuông hoàn hảo được thêm vào để tạo thành một số trong C ++

Giả sử chúng ta có một số dương n, chúng ta phải tìm số ít nhất trong các số vuông hoàn hảo có tổng bằng n. Vì vậy, nếu số là 10, thì đầu ra là 2, vì các số là 10 =9 + 1.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • tạo một bảng để lập trình động, có độ dài n + 1 và điền vào nó bằng vô cực
  • dp [0]:=0
  • đối với i:=1, khi i * i <=n
    • x =i * i
    • for j:=x to n
      • dp [j]:=tối thiểu là dp [j] và 1 + dp [j - x]
  • trả về dp [n]

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#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);
}

Đầu vào

10

Đầu ra

2