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

เปลี่ยนเหรียญ 2 ใน C++


สมมุติว่าเรามีเหรียญหลายนิกายและจำนวนเงินทั้งหมด เราต้องเขียนโมดูลเพื่อคำนวณจำนวนชุดค่าผสมที่รวมกันเป็นจำนวนนั้น เราสามารถสรุปได้ว่าเรามีจำนวนเหรียญแต่ละชนิดเป็นอนันต์ ดังนั้นหากจำนวนเท่ากับ 5 และเหรียญเป็น [1, 2, 5] แสดงว่ามีสี่ชุดค่าผสม (1+1+1+1+1), (1+1+1+2), (1+2+2), (5)

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

  • สร้างหนึ่งอาร์เรย์ dp ของจำนวนขนาด + 1
  • dp[0] :=1
  • n :=ขนาดของอาร์เรย์เหรียญ
  • สำหรับ i ในช่วง 0 ถึง n – 1
    • สำหรับ j ในช่วง coins[i] ถึงจำนวน
      • dp[j] :=dp[j – coins[i]]
  • คืน dp[จำนวน]

ตัวอย่าง(C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int change(int amount, vector<int>& coins) {
      vector <int> dp(amount + 1);
      dp[0] = 1;
      int n = coins.size();
      for(int i = 0; i < n; i++){
         for(int j = coins[i]; j <= amount; j++){
            dp[j] += dp[j - coins[i]];
         }
      }
      return dp[amount];
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,5};
   cout << (ob.change(5, v));
}

อินพุต

5
[1,2,5]

ผลลัพธ์

4