Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Perfect Squares ใน C++


สมมติว่าเรามีจำนวนเต็มบวก n จงหาจำนวนที่น้อยที่สุดของจำนวนเต็มกำลังสองสมบูรณ์ที่ผลรวมเป็น n ดังนั้นหากตัวเลขคือ 13 ผลลัพธ์ก็คือ 2 เนื่องจากตัวเลขคือ 13 =9 + 4

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • สร้างตารางหนึ่งตารางสำหรับโปรแกรมไดนามิก ความยาว n + 1 และเติมด้วยอินฟินิตี้
  • dp[0] :=0
  • สำหรับ i :=1 เมื่อ i*i <=n
    • x =ฉัน * ฉัน
    • สำหรับ j :=x ถึง n
      • dp[j] :=ขั้นต่ำของ dp[j] และ 1 + dp[j – x]
  • ส่งคืน dp[n]

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
#define INF 1e9
class Solution {
   public:
   int numSquares(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.numSquares(147));
}

อินพุต

147

ผลลัพธ์

3