একটি ধনাত্মক সংখ্যা n দেওয়া আছে। লক্ষ্য হল যেসব পূর্ণবর্গ সংখ্যা যোগ করে n তৈরি করা যায়, তাদের ন্যূনতম সংখ্যা বের করা। ডাইনামিক প্রোগ্রামিং দিয়ে সমাধান।
dp[i] = i গঠন করতে লাগবে ন্যূনতম পূর্ণবর্গ সংখ্যা। dp[0]=0। প্রতিটি পূর্ণবর্গ x=i*i-এর জন্য dp[j] = min(dp[j], 1+dp[j-x]) আপডেট করা হয়।
ইনপুট: 10
আউটপুট: ২
ব্যাখ্যা: ১০ = ৯ + ১ (দুটি পূর্ণবর্গ)
#includeusing namespace std; #define INF 1e9 class Solution { public: int solve(int n) { vector 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]; } }; int main(){ Solution ob; cout << ob.solve(10); return 0; }
উপরোক্ত কোড রান করলে আউটপুট:
2