From b61f47947df00859a4a0128e84d84f43c5b53a95 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2025年9月14日 00:53:17 -0700 Subject: [PATCH 1/3] Create 3685.Subsequence-Sum-After-Capping-Elements.cpp --- ...Subsequence-Sum-After-Capping-Elements.cpp | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements/3685.Subsequence-Sum-After-Capping-Elements.cpp diff --git a/Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements/3685.Subsequence-Sum-After-Capping-Elements.cpp b/Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements/3685.Subsequence-Sum-After-Capping-Elements.cpp new file mode 100644 index 000000000..3633e575c --- /dev/null +++ b/Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements/3685.Subsequence-Sum-After-Capping-Elements.cpp @@ -0,0 +1,29 @@ +class Solution { +public: + vector subsequenceSumAfterCapping(vector& nums, int k) { + int n = nums.size(); + vectordp(k+1,0); + dp[0] = 1; + vectorrets(n, 0); + + sort(nums.begin(), nums.end()); + int i = 0; + for (int x=1; x<=n; x++) { + while (i=1; c--) { + if (c Date: 2025年9月14日 00:53:51 -0700 Subject: [PATCH 2/3] Update Readme.md --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 9ced2324e..62a1937dc 100644 --- a/Readme.md +++ b/Readme.md @@ -888,6 +888,7 @@ [2902.Count-of-Sub-Multisets-With-Bounded-Sum](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/2902.Count-of-Sub-Multisets-With-Bounded-Sum) (H) [3489.Zero-Array-Transformation-IV](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/3489.Zero-Array-Transformation-IV) (H-) [3592.Inverse-Coin-Change](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/3592.Inverse-Coin-Change) (H) +[3685.Subsequence-Sum-After-Capping-Elements](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements) (H) * ``键盘型`` [650.2-Keys-Keyboard](https://github.com/wisdompeak/LeetCode/blob/master/Dynamic_Programming/650.2-Keys-Keyboard) (M+) [651.4-Keys-Keyboard](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/651.4-Keys-Keyboard) (M+) From 34b73c7a86fb529a3eb01b0ccad8afd5373b3b0a Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2025年9月14日 01:26:38 -0700 Subject: [PATCH 3/3] Create Readme.md --- .../Readme.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements/Readme.md diff --git a/Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements/Readme.md b/Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements/Readme.md new file mode 100644 index 000000000..d40cb52db --- /dev/null +++ b/Dynamic_Programming/3685.Subsequence-Sum-After-Capping-Elements/Readme.md @@ -0,0 +1,24 @@ +### 3685.Subsequence-Sum-After-Capping-Elements + +对于n个元素,问是否可以组合出和为k的方案,就是一个典型的有界背包问题,用o(n*k)的时间复杂度可解。大致算法是: +```cpp +for (int i=0; i=1; c--) { + dp[c] |= dp[c-nums[i]; + } +} +``` + +对于此题而言,对于每一个给定的x,我们要用nums里所有小于x的元素,以及剩余的元素当做x使用,问是否能组合出和为k的方案。我们暂时先不考虑第二种用法,即只用nums里小于x的元素。我们发现,随着x的增大,其实第一个for循环里可选的元素种类的上界也在单调增大,故总体这依然是一个o(n*k)可解的问题。 + +然后更深入地思考,我们将x从小到大遍历的时候,可以不断提升i,从而加入所有不超过x的新nums[i],就可以不断更新dp。同时我们还需要考虑等于x的元素:因为capping的缘故,这样的元素有n-i个。此时我们需要考虑这额外的n-i个元素能否对于组成k有帮助。显然我们可以用同样的背包思想: +```cpp +for (int j=1; j

AltStyle によって変換されたページ (->オリジナル) /