LintCode "k Sum" !!

时间:2023-03-09 08:37:36
LintCode "k Sum" !!

Great great DP learning experience:
http://www.cnblogs.com/yuzhangcmu/p/4279676.html

Remember 2 steps of DP: a) setup state transfer equation; b) setup selection strategy.

a) States

From problem statement, we find 3 variables: array size, k and target. So it is 3D DP:

dp[i][j][t]: in previous i elements, we pick j of them, to reach value t - number of results

b) Selection Strategy

Usually for 1D array, selection strategy is very simple: with A[i] - pick it or not. Combined with step a, dp[i][j][t] is result of the 2 choices - pick or not:

dp[i][j][t] = dp[i-1][j-1][t-A[i]](pick it) + dp[i-1][j][t](no pick)

Optimization: dimension i can be eliminated.

Details: To start: all dp[*][0][0] = 1