4
私は番号nを持ち、k個の番号に分けてk個の番号の合計がnに等しく、kが最大になるように分割する必要があります。例nが9の場合、答えは1,2,6でなければなりません。 nが15の場合、答えは1,2,3,4,5となるはずです。
これは私が試したものである -番号nをk個の別個の番号の和として分割する
void findNum(int l, int k, vector<int>& s)
{
if (k <= 2 * l) {
s.push_back(k);
return;
}
else if (l == 1) {
s.push_back(l);
findNum(l + 1, k - 1, s);
}
else if(l == 2) {
s.push_back(l);
findNum(l + 2, k - 2, s);
}
else{
s.push_back(l);
findNum(l + 1, k - l, s);
}
}
を最初= N及びL K = 1の結果の数をSに格納されています。この解は数nをk個の異なる数の和として返しますが、最適解ではありません(kは最大ではありません)。 n = 15の出力例は1,2,4,8です。正しい結果を得るためにはどのような変更を行う必要がありますか?
ここで何が間違っている - 'のための出力のn = 15 1,2,4,8'あります? –
@WasiAhmad 8は5と3に分割することができ、結果の合計数は4ではなく5になります。 – XZ6H
動的プログラミング – mangusta