From 16691e147565417803d958b25433e03a5d6ba7eb Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Fri, 10 Jun 2022 17:57:36 -0700 Subject: [PATCH 01/11] Create 2291.Maximum-Profit-From-Trading-Stocks.cpp --- .../2291.Maximum-Profit-From-Trading-Stocks.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks/2291.Maximum-Profit-From-Trading-Stocks.cpp diff --git a/Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks/2291.Maximum-Profit-From-Trading-Stocks.cpp b/Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks/2291.Maximum-Profit-From-Trading-Stocks.cpp new file mode 100644 index 000000000..5e4d26c35 --- /dev/null +++ b/Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks/2291.Maximum-Profit-From-Trading-Stocks.cpp @@ -0,0 +1,16 @@ +class Solution { +public: + int maximumProfit(vector& present, vector& future, int budget) + { + int n = present.size(); + + vectordp(1001); + for (int i=0; i=present[i]; j--) + { + dp[j] = max(dp[j], dp[j-present[i]]+future[i]-present[i]); + } + + return dp[budget]; + } +}; From 1ca95cd91979b442ecfdd85464fbba55fe362620 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Fri, 10 Jun 2022 17:58:05 -0700 Subject: [PATCH 02/11] Update Readme.md --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 8af49f275..47f31a094 100644 --- a/Readme.md +++ b/Readme.md @@ -680,6 +680,7 @@ [1049.Last-Stone-Weight-II](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1049.Last-Stone-Weight-II) (H-) [1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target) (H-) [1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements) (M+) +[2291.Maximum-Profit-From-Trading-Stocks](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks) (M) * ``键盘型`` [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 b8466d9a7369329ee827b312114a71f9b1116870 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Fri, 10 Jun 2022 18:01:33 -0700 Subject: [PATCH 03/11] Create Readme.md --- .../2291.Maximum-Profit-From-Trading-Stocks/Readme.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks/Readme.md diff --git a/Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks/Readme.md b/Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks/Readme.md new file mode 100644 index 000000000..e5a744797 --- /dev/null +++ b/Dynamic_Programming/2291.Maximum-Profit-From-Trading-Stocks/Readme.md @@ -0,0 +1,3 @@ +### 2291.Maximum-Profit-From-Trading-Stocks + +非常直观的01背包问题。挨个遍历物品。考察对于给定某budget情况下,加入这个物品是否能带来更大的收益,即```dp[budget] = max(dp[budget], dp[budget-cost[i]] + profit[i])``` From 1a1b035f037926e84e6cfff0dc62bba7548a87fd Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Fri, 10 Jun 2022 18:25:26 -0700 Subject: [PATCH 04/11] Update Readme.md --- Readme.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Readme.md b/Readme.md index 47f31a094..93813a9f1 100644 --- a/Readme.md +++ b/Readme.md @@ -737,7 +737,6 @@ * ``状态压缩DP`` [465.Optimal-Account-Balancing](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/465.Optimal-Account-Balancing) (H) [691.Stickers-to-Spell-Word](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/691.Stickers-to-Spell-Word) (H) -[943.Find-the-Shortest-Superstring](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/943.Find-the-Shortest-Superstring) (H+) [1125.Smallest-Sufficient-Team](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1125.Smallest-Sufficient-Team) (H) [1349.Maximum-Students-Taking-Exam](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1349.Maximum-Students-Taking-Exam) (H) [1411.Number-of-Ways-to-Paint-N×3-Grid](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1411.Number-of-Ways-to-Paint-N%C3%973-Grid) (M) @@ -755,11 +754,13 @@ [1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks) (M+) [2152.Minimum-Number-of-Lines-to-Cover-Points](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/2152.Minimum-Number-of-Lines-to-Cover-Points) (H-) * ``带权二分图`` -[1066.Campus-Bikes-II](https://github.com/wisdompeak/LeetCode/tree/master/BFS/1066.Campus-Bikes-II) (H+) -[1595.Minimum-Cost-to-Connect-Two-Groups-of-Points](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points) (H) -[1879.Minimum-XOR-Sum-of-Two-Arrays](https://github.com/wisdompeak/LeetCode/tree/master/BFS/1879.Minimum-XOR-Sum-of-Two-Arrays) (H) -[1947.Maximum-Compatibility-Score-Sum](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1947.Maximum-Compatibility-Score-Sum) (H) -[2172.Maximum-AND-Sum-of-Array](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/2172.Maximum-AND-Sum-of-Array) (H) + [1066.Campus-Bikes-II](https://github.com/wisdompeak/LeetCode/tree/master/BFS/1066.Campus-Bikes-II) (H+) + [1595.Minimum-Cost-to-Connect-Two-Groups-of-Points](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points) (H) + [1879.Minimum-XOR-Sum-of-Two-Arrays](https://github.com/wisdompeak/LeetCode/tree/master/BFS/1879.Minimum-XOR-Sum-of-Two-Arrays) (H) + [1947.Maximum-Compatibility-Score-Sum](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1947.Maximum-Compatibility-Score-Sum) (H) + [2172.Maximum-AND-Sum-of-Array](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/2172.Maximum-AND-Sum-of-Array) (H) + * ``TSP`` + [943.Find-the-Shortest-Superstring](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/943.Find-the-Shortest-Superstring) (H+) * ``Catalan`` [096.Unique-Binary-Search-Trees](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/096.Unique-Binary-Search-Trees) (M+) [1259.Handshakes-That-Don't-Cross](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1259.Handshakes-That-Don't-Cross) (M+) From 50cf5fc2d244e9087bbcb03f2f983a7becd7a843 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Fri, 10 Jun 2022 22:42:16 -0700 Subject: [PATCH 05/11] Update 2296.Design-a-Text-Editor_v1.cpp --- .../2296.Design-a-Text-Editor_v1.cpp | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Design/2296.Design-a-Text-Editor/2296.Design-a-Text-Editor_v1.cpp b/Design/2296.Design-a-Text-Editor/2296.Design-a-Text-Editor_v1.cpp index cf6ae12be..84e0a47db 100644 --- a/Design/2296.Design-a-Text-Editor/2296.Design-a-Text-Editor_v1.cpp +++ b/Design/2296.Design-a-Text-Editor/2296.Design-a-Text-Editor_v1.cpp @@ -3,16 +3,13 @@ class TextEditor { list::iterator iter; public: TextEditor() { - t.push_back('#'); iter = t.begin(); } void addText(string text) { for (auto ch: text) - { t.insert(iter, ch); - } } int deleteText(int k) @@ -24,7 +21,7 @@ class TextEditor { t.erase(iter2); k--; ret++; - } + } return ret; } @@ -35,36 +32,36 @@ class TextEditor { iter = prev(iter); k--; } - int p = 10; - while (iter!=t.begin() && p>0) + int p = 0; + while (iter!=t.begin() && p<10) { iter = prev(iter); - p--; + p++; } string ret; - for (int i=0; i<10-p; i++) + for (int i=0; i0) + while (iter!=t.end() && k>0) { iter = next(iter); k--; } - int p = 10; - while (iter!=t.begin() && p>0) + int p = 0; + while (iter!=t.begin() && p<10) { iter = prev(iter); - p--; + p++; } string ret; - for (int i=0; i<10-p; i++) + for (int i=0; i Date: Fri, 10 Jun 2022 22:56:08 -0700 Subject: [PATCH 06/11] Create Readme.md --- Design/2296.Design-a-Text-Editor/Readme.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Design/2296.Design-a-Text-Editor/Readme.md diff --git a/Design/2296.Design-a-Text-Editor/Readme.md b/Design/2296.Design-a-Text-Editor/Readme.md new file mode 100644 index 000000000..a0e60b326 --- /dev/null +++ b/Design/2296.Design-a-Text-Editor/Readme.md @@ -0,0 +1,16 @@ +### 2296.Design-a-Text-Editor + +#### 解法1:链表 +本题需要有一种线性的数据结构,能有一个灵活的指针,可以o(1)地删除指向的内部元素,并且依然可以o(1)的时间左移右移。显然这就是链表。 + +C++里面自带链表结构: +```cpp +listList; +``` +该链表的迭代器就是指针 +···cpp +list::iterator iter; +··· + +#### 解法2:两个栈 +我们以指针为界,左边的部分放入一个栈,右边的部分放入一个栈。删除就意味着将弹出左边栈的顶部元素即可。打印的话,因为不超过10个字符,所以从栈顶拿出10个字符暂存下来再放回去就可以了。 From 28250524958ffec74089c7c84fc3070e6454dd65 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Fri, 10 Jun 2022 22:56:22 -0700 Subject: [PATCH 07/11] Update Readme.md --- Design/2296.Design-a-Text-Editor/Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Design/2296.Design-a-Text-Editor/Readme.md b/Design/2296.Design-a-Text-Editor/Readme.md index a0e60b326..bdbdf666a 100644 --- a/Design/2296.Design-a-Text-Editor/Readme.md +++ b/Design/2296.Design-a-Text-Editor/Readme.md @@ -8,9 +8,9 @@ C++里面自带链表结构: listList; ``` 该链表的迭代器就是指针 -···cpp +```cpp list::iterator iter; -··· +``` #### 解法2:两个栈 我们以指针为界,左边的部分放入一个栈,右边的部分放入一个栈。删除就意味着将弹出左边栈的顶部元素即可。打印的话,因为不超过10个字符,所以从栈顶拿出10个字符暂存下来再放回去就可以了。 From 1816cbb6bae47edfe6f048411e6b8ea3ec0b1493 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Fri, 10 Jun 2022 23:29:24 -0700 Subject: [PATCH 08/11] Update Readme.md --- Design/2296.Design-a-Text-Editor/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Design/2296.Design-a-Text-Editor/Readme.md b/Design/2296.Design-a-Text-Editor/Readme.md index bdbdf666a..c34b28062 100644 --- a/Design/2296.Design-a-Text-Editor/Readme.md +++ b/Design/2296.Design-a-Text-Editor/Readme.md @@ -1,7 +1,7 @@ ### 2296.Design-a-Text-Editor #### 解法1:链表 -本题需要有一种线性的数据结构,能有一个灵活的指针,可以o(1)地删除指向的内部元素,并且依然可以o(1)的时间左移右移。显然这就是链表。 +本题需要有一种线性的数据结构,能有一个灵活的指针,可以o(1)地删除和添加指向的内部元素,并且依然可以o(1)的时间左移右移。显然这就是链表。 C++里面自带链表结构: ```cpp From 8d60b437390e58837b789af3afb54459fddbe6fc Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Sat, 11 Jun 2022 00:25:35 -0700 Subject: [PATCH 09/11] Create 2247.Maximum-Cost-of-Trip-With-K-Highways.cpp --- ...7.Maximum-Cost-of-Trip-With-K-Highways.cpp | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways/2247.Maximum-Cost-of-Trip-With-K-Highways.cpp diff --git a/Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways/2247.Maximum-Cost-of-Trip-With-K-Highways.cpp b/Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways/2247.Maximum-Cost-of-Trip-With-K-Highways.cpp new file mode 100644 index 000000000..64a81808c --- /dev/null +++ b/Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways/2247.Maximum-Cost-of-Trip-With-K-Highways.cpp @@ -0,0 +1,38 @@ +class Solution { +public: + int maximumCost(int n, vector>& highways, int k) + { + vector>>next(n); + for (auto highway: highways) + { + int a = highway[0], b = highway[1], t = highway[2]; + next[a].push_back({b,t}); + next[b].push_back({a,t}); + } + + int ret = -1; + vector>dp(1<(n, INT_MIN)); + for (int i=0; i>last)&1)==0) continue; + for (auto nxt: next[last]) + { + auto [j, t] = nxt; + if ((state>>j)&1) continue; + dp[state+(1< Date: Sat, 11 Jun 2022 00:26:57 -0700 Subject: [PATCH 10/11] Update Readme.md --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 93813a9f1..cf54fcceb 100644 --- a/Readme.md +++ b/Readme.md @@ -761,6 +761,7 @@ [2172.Maximum-AND-Sum-of-Array](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/2172.Maximum-AND-Sum-of-Array) (H) * ``TSP`` [943.Find-the-Shortest-Superstring](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/943.Find-the-Shortest-Superstring) (H+) + [2247.Maximum-Cost-of-Trip-With-K-Highways](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways) (H) * ``Catalan`` [096.Unique-Binary-Search-Trees](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/096.Unique-Binary-Search-Trees) (M+) [1259.Handshakes-That-Don't-Cross](https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1259.Handshakes-That-Don't-Cross) (M+) From c07794e4ae9d65bbf6a1a5ec45cec79e472a2e43 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: Sat, 11 Jun 2022 00:33:05 -0700 Subject: [PATCH 11/11] Create Readme.md --- .../2247.Maximum-Cost-of-Trip-With-K-Highways/Readme.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways/Readme.md diff --git a/Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways/Readme.md b/Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways/Readme.md new file mode 100644 index 000000000..b32e68aa5 --- /dev/null +++ b/Dynamic_Programming/2247.Maximum-Cost-of-Trip-With-K-Highways/Readme.md @@ -0,0 +1,9 @@ +### 2247.Maximum-Cost-of-Trip-With-K-Highways + +本题是说要找出一条最长的路径,恰能包含k+1个节点(起始点可以自由选择)。要求节点不能重复经过(自然边也不会重复经过)。 + +这是一个经典的旅行商问题(TSP)。解法和```943.Find-the-Shortest-Superstring```一样。考虑到节点总数不超过15个,我们可以用二进制数state表示经过的节点的集合。令dp[state][last]表示走过了state所代表的节点集合、并且最后一站是节点last的情况下,所能得到的最优解。假设last与j相邻,且j不在state中,则有状态转移方程 +```cpp +dp[state + (1<