Hend von der Frage, glaube ich, dass die Antwort gepostet von AT-2016 ist richtig, und es gibt keine Lösung, die das Konzept der dynamischen Programmierung ausnutzen können, um die Komplexität zu reduzieren.
Hier ist, wie Sie dynamische Programmierung ausnutzen können, um eine ähnliche Frage zu lösen, die die Summe aller möglichen Unterfolgensummen zurückgibt.
sich das Array {2, 2, 5, 7}: Die verschiedenen möglichen Untersequenzen sind:
{2}, {2}, {5}, {7}, {2,5}, { 2,5}, {5,7}, {2,5,7}, {2,5,7}, {2,2,5,7}, {2,2}, {2,7}, { 2,7}, {2,2,7}, {2,2,5}
Die Frage ist also, die Summe all dieser Elemente aus all diesen Subsequenzen zu finden. Dynamische Programmierung kommt zur Rettung !!
Ordne die Subsequenzen, basierend auf dem Endelement eines jeden Subsequenz:
- Subsequenzen mit dem ersten Element endet: {2}
- Subsequenzen mit dem zweiten Element endet: {2}, {2,2 }
- Untersequenzen, die mit dem dritten Element enden: {5}, {2,5}, {2,5}, {2,2,5}
- Untersequenzen, die mit dem vierten Element enden: {7}, {5 , 7}, {2,7}, {2,7}, {2,2,7}, {2,5,7}, {2,5,7}, {2,2,5,7}.
Hier ist der Code-Schnipsel:
Das Array 's []' die Summen für 1,2,3,4 individuell berechnet, dh, s [2] berechnet die Summe aller Teilfolgen endet mit drittem Element. Das Array 'dp []' berechnet die Gesamtsumme bis jetzt.
s[0]=array[0];
dp[0]=s[0];
k = 2;
for(int i = 1; i < n; i ++)
{
s[i] = s[i-1] + k*array[i];
dp[i] = dp[i-1] + s[i];
k = k * 2;
}
return dp[n-1];
Sie wollen also die Ausgabe ein Array mit Werten: 4,7,12,9, ... für Ihren Fall? –
Genau. Ein Array mit den Ergebnissen in der Tat. – Dai
Es gibt eine DP-Lösung, um die Summe aller möglichen Summen aus einer Teilfolge der Zahlen im Array zu finden. das heißt, die Summe von {2} {2}, {2,2} {5}, {2,5}, {2,5}, {2,2,5} { 7}, {2,7}, {2,7}, {2,2,7}, {5,7}, {2,5,7}, {2,5,7}, {2,2, 5,7} –