私は 3 分割問題の解決策を見つけました。つまり、n 個の数が与えられた場合、すべてが等しくなる (つまり、各サブセットの合計が n数/3)。
同様の質問が3-PARTITION problem にあります。ただし、以下のコードの説明を探しています。
簡単に言えば、何が起こっているのかわかりません。T が何であるか、i または j が何であるか、k が何であるか、あるいはなぜ k と j が N から始まり、デクリメントされているのか、"T[j + C[i]][k] = true; T[j][k + C[i]] = true」という意味ですか、またはなぜ T[N/3] を返すのでしょうか?
bool T[10240][10000];
bool partition( vector< int > C ) {
// compute the total sum
int n = C.size();
int N = 0;
for( int i = 0; i < n; i++ ) N += C[i];
// initialize the table
T[0][0] = true;
memset(T, 0, 10000^2);
// process the numbers one by one
for( int i = 0; i < n; i++ ) {
for (int j = N; j >= 0; --j) {
for (int k = N; k >= 0; --k) {
if (T[j][k]) {
T[j + C[i]][k] = true;
T[j][k + C[i]] = true;
}
}
}
}
return T[N / 3];
}