From 70cfb1c87f809e4d106d74a9726e9192c700f962 Mon Sep 17 00:00:00 2001 From: colorbox Date: Mon, 4 Aug 2025 01:20:29 +0900 Subject: [PATCH] 276. Paint Fence --- 276/step1.cpp | 35 +++++++++++++++++++++++++++++++++++ 276/step2.cpp | 24 ++++++++++++++++++++++++ 276/step3.cpp | 20 ++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 276/step1.cpp create mode 100644 276/step2.cpp create mode 100644 276/step3.cpp diff --git a/276/step1.cpp b/276/step1.cpp new file mode 100644 index 0000000..1823045 --- /dev/null +++ b/276/step1.cpp @@ -0,0 +1,35 @@ +/* + +Solve Time: 20:00 + +Time: O(n) +Space: O(n) + +色の数で混乱しかけたが +- 前に使った色と同じ色でなければよいので、色の数の多さはそこまで影響がない +- 1枚塗るか2枚塗るというのを配列を1,2進むで表現可能 +の二点に気づいたら割とすんなりできた +kを入れる位置に少し悩んだが、なんとかパスした +*/ + +class Solution { +public: + int numWays(int n, int k) { + if (k == 1 && n >= 3) { + return 0; + } + if (n == 1 || k == 1) { + return k; + } + vector dp(n + 1); + dp[1] = k; + dp[2] = k; + for (int i = 2; i <= n; ++i) { + dp[i] += dp[i - 1] * (k - 1); + if (i >= 2) { + dp[i] += dp[i - 2] * (k - 1); + } + } + return dp[n]; + } +}; diff --git a/276/step2.cpp b/276/step2.cpp new file mode 100644 index 0000000..856d599 --- /dev/null +++ b/276/step2.cpp @@ -0,0 +1,24 @@ +class Solution { +public: + int numWays(int n, int k) { + if (k == 1) { + if (n>=3) { + return 0; + } + return 1; + } + if (n == 1) { + return k; + } + vector dp(n+1); + dp[1] = k; + dp[2] = k; + for (int i = 2; i <= n; ++i) { + dp[i] += dp[i - 1] * (k - 1); + if (i > 2) { + dp[i] += dp[i - 2] * (k - 1); + } + } + return dp[n]; + } +}; diff --git a/276/step3.cpp b/276/step3.cpp new file mode 100644 index 0000000..f890352 --- /dev/null +++ b/276/step3.cpp @@ -0,0 +1,20 @@ +class Solution { +public: + int numWays(int n, int k) { + if (n == 1) { + return k; + } + if (n == 2) { + return k * (k - 1) + k; + } + + int previous_count = k; + int count = k * (k - 1) + k; + for (int i = 2; i < n; ++i) { + int tmp = count; + count = count * (k - 1) + previous_count * (k - 1); + previous_count = tmp; + } + return count; + } +};