diff --git a/0322-coin-change/memo.md b/0322-coin-change/memo.md new file mode 100644 index 0000000..1d8eda8 --- /dev/null +++ b/0322-coin-change/memo.md @@ -0,0 +1,13 @@ +### step1 + +DFSでコイン1枚ずつ遷移させていく方法しか思いつかず、TLEしてしまったのでChatGPTにDPで解き直してもらった。 +他の方のPRを見ていると、配るDP, もらうDPに関していくつか記述があったので調べてみた。(https://algo-method.com/descriptions/78) +今回書いたDPは配るDPらしい。 + +### step2 + +変更点なし。 + +### step3 + +3回通すまで書き直し。 diff --git a/0322-coin-change/step1.cpp b/0322-coin-change/step1.cpp new file mode 100644 index 0000000..97cff6a --- /dev/null +++ b/0322-coin-change/step1.cpp @@ -0,0 +1,18 @@ +class Solution { +public: + int coinChange(vector& coins, int amount) { + const int INF = 1e9; + + vector min_coins(amount + 1, INF); + min_coins[0] = 0; + + for (int i = 0; i <= amount; i++) { + for (int coin : coins) { + if (i <= amount - coin) { + min_coins[i + coin] = min(min_coins[i + coin], min_coins[i] + 1); + } + } + } + return min_coins[amount] == INF ? -1 : min_coins[amount]; + } +}; diff --git a/0322-coin-change/step2.cpp b/0322-coin-change/step2.cpp new file mode 100644 index 0000000..97cff6a --- /dev/null +++ b/0322-coin-change/step2.cpp @@ -0,0 +1,18 @@ +class Solution { +public: + int coinChange(vector& coins, int amount) { + const int INF = 1e9; + + vector min_coins(amount + 1, INF); + min_coins[0] = 0; + + for (int i = 0; i <= amount; i++) { + for (int coin : coins) { + if (i <= amount - coin) { + min_coins[i + coin] = min(min_coins[i + coin], min_coins[i] + 1); + } + } + } + return min_coins[amount] == INF ? -1 : min_coins[amount]; + } +}; diff --git a/0322-coin-change/step3.cpp b/0322-coin-change/step3.cpp new file mode 100644 index 0000000..48c0900 --- /dev/null +++ b/0322-coin-change/step3.cpp @@ -0,0 +1,17 @@ +class Solution { +public: + int coinChange(vector& coins, int amount) { + const int INF = 1e9; + vector min_coins(amount + 1, INF); + min_coins[0] = 0; + + for (int i = 0; i <= amount; i++) { + for (int coin : coins) { + if (i <= amount - coin) { + min_coins[i + coin] = min(min_coins[i + coin], min_coins[i] + 1); + } + } + } + return min_coins[amount] == INF ? -1 : min_coins[amount]; + } +};