Ich habe eine Nummer n und ich muss es in k Zahlen so teilen, dass alle k Zahlen sind unterschiedlich, die Summe der k Zahlen ist gleich n und k ist maximal. Beispiel wenn n 9 ist, dann sollte die Antwort 1,2,6 sein. Wenn n 15 ist, dann sollte die Antwort 1,2,3,4,5 sein.
Dies ist, was ich versucht habe -spalte eine Zahl n als Summe von k verschiedenen Zahlen
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);
}
}
Zunächst k = n und l = 1. Die resultierenden Zahlen in s gespeichert sind. Diese Lösung gibt zwar die Zahl n als eine Summe von k eindeutigen Zahlen zurück, aber es ist nicht die optimale Lösung (k ist nicht maximal). Beispielausgabe für n = 15 ist 1,2,4,8. Welche Änderungen sollten vorgenommen werden, um das richtige Ergebnis zu erhalten?
was hier falsch ist - 'Ausgabe für n = 15 ist 1,2,4,8' ?? –
@WasiAhmad 8 kann in 5 und 3 aufgeteilt werden und die resultierende Gesamtzahl wird 5 statt 4 sein. – XZ6H
dynamische Programmierung – mangusta