數控加工中心解密給定 n 個不同的正整數,整數 k(k <= n)以及乙個目標數字 target。
在這 n 個數裡面找出 k 個數,使得這 k 個數的和等於目標數字,求問有多少種方案?
樣例1輸入:
list = [1,2,3,4]
k = 2
target = 5
輸出: 2
說明: 1 + 4 = 2 + 3 = 5
樣例2輸入:
list = [1,2,3,4,5]
k = 3
target = 6
輸出: 1
說明: 只有這一種方案。 1 + 2 + 3 = 6
演算法:dp
如果沒有k的約束。我們可以發現,這題就可以轉化為揹包問題。利用n個正整數達到目標target。那麼有了k的約束之後,我們需要用額外的一維來維護使用的數字。所以約定狀態如下,用dp[i][j][k]表示前ii個數里選j個和為k的方案數。
假定dp[i][j][k]之前的方案數都已知,考慮dp[i][j][k]的情況。
dp[i][j][k]可以由dp[i−1][j−1][k−a[i−1]]的狀態取a[i-1]得到。
dp[i][j][k]也可以由dp[i−1][j][k]直接得到,即不取a[i-1]。
最後返回f[n][k][target]即可。
複雜度分析
時間複雜度o(n∗k∗target)o(n∗k∗target)
空間複雜度o(n∗k∗target)o(n∗k∗target)
時間複雜度與空間複雜度是等價的。
在這裡,空間複雜度可以用滾動陣列優化。
public class solution
for (int i = 1; i <= n; i++)
f[i][j][t] += f[i - 1][j][t];
} // for t
} // for j
} // for i
return f[n][k][target];
}
數控工具機解密
fn 1,2,3,4,5 print 1,2,3,4,5 fn 1 2 3,4,5 print 1,2,3,4,5 fn 1,2 3,4 5 print 1,2,3,4,5 fn 1 2 3 4 5 print 1,2,3,4,5 複製 柯理化函式的實現 對求和函式做curry化 let f1 cu...
數控工具機解密
webpack 的 loader 本質上其實就是乙個函式,數控工具機解密我們可以在這個函式內部,根據正則匹配出我們想刪除的字串,對其進行替換。自定義 loaders ignore console log loader.js 很簡單,如下 const reg console.log gmodule.e...
UG程式設計數控加工的優點
先進的數控加工技術是乙個國家製造業發達的標誌,利用數控加工技術可以加工很多 普通工具機不能加工的複雜曲面零件和模具,並且加工的穩定性和精度都會得到很大的保證。總體說,數控加工與傳統加工相比具有以下優點。1 加工效率高。利用數位化的控制手段可以加工複雜的曲面,並且加工過程是由計 算機控制的,所以零件的...