(), , (, , , ). , nS . . , : - n, - "" S, .. S, M. , n 2^M.
, A. n S. , A[i][j] - , i j. , A , .. A[n][S] (, 1).
A[i][j]. , i ith, . , , A[i-1][j]. , , A[i-1][j-v[i]], v[i] - i- . , , i- , j-v[i]. , , , j- , . , (: i, 1 j):
std::vector<int> elements{1,2,3};
int S = 5;
auto N = elements.size();
std::vector<std::vector<int>> A;
A.resize(N);
for (auto& v : A) {
v.resize(S+1);
}
for (int j = 1; j != S+1; ++j) {
A[0][j] = (elements[0] <= j);
}
for (int i = 1; i != N; ++i) {
for (int j = 1; j != S+1; ++j) {
A[i][j] = A[i-1][j];
auto leftover = j - elements[i];
if (leftover >= 0) ++A[i][j];
if (leftover >= 1) {
A[i][j] += A[i-1][leftover];
}
}
}
, A[N-1][S] 6 . , ( /, 1-, ).