We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 4ead70c commit c19d0baCopy full SHA for c19d0ba
Dynamic_Programming/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/Readme.md
@@ -0,0 +1,9 @@
1
+### 1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements
2
+
3
+此题类似于分组背包问题。每组物品里只能取一个,求如何选取物品最接近target。
4
5
+背包问题的思想核心就是以容量为考察点。选择完第一组物品会占据哪些容量。将这些可能的容量,再与第二组物品两两组合,得到第二轮结束后可能会占据哪些容量。依次处理完所有组,就可以得到最终可能会占据哪些容量,再挑选其中与target最接近的一个。
6
7
+因为最多有70组,每个物品最多是70,最终总容量的可能性是```70*70=4900```,所以每一个回合需要遍历4900种容量,并且与下一组的70个物品两两组合。总共70个回合。所以总的时间复杂度是```4900*70*70```. 这样的复杂度太大了,哪里可以优化呢?
8
9
+本题的target不超过800,所以每一个回合时,任何大于target的容量,我们只保留最小的一个即可。因为其他更大的容量(随着更多物品的累积)必然与target的差距会更大。所以每一个回合我们只需要遍历801种容量即可。于是时间复杂度就降下来了。
0 commit comments