Основываясь на вопрос, я думаю, что ответ отправленный AT-2016, является правильным, и нет решения, которое может использовать концепцию динамического программирования для уменьшения сложности.
Вот как вы можете использовать динамическое программирование для решения аналогичного вопроса, который просит вернуть сумму всех возможных сумм подпоследовательности.
Рассмотрим массив {2, 2, 5, 7}: Различные возможные подпоследовательности являются:
{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}
Итак, вопрос состоит в том, чтобы найти сумму всех этих элементов из всех этих подпоследовательностей. Динамическое программирование приходит на помощь !!
организовать подпоследовательности на основе заканчивающегося элемента каждой подпоследовательности:
- подпоследовательности, заканчивающийся с первым элементом: {2}
- подпоследовательности с окончанием второго элемента: {2}, {2,2 }
- подпоследовательности, заканчивающиеся на третий элемент: {5}, {2,5}, {2,5}, {2,2,5}
- подпоследовательности, заканчивающиеся на четвертый элемент: {7}, {5 , 7}, {2,7}, {2,7}, {2,2,7}, {2,5,7}, {2,5,7}, {2,2,5,7}.
Вот фрагмент кода:
Массив «s []» рассчитывает суммы для 1,2,3,4 индивидуально, то есть, с [2] вычисляет сумму всех подпоследовательностей окончание с третьим элементом. Массив 'dp []' вычисляет общую сумму до сих пор.
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];
Итак, вы хотите, чтобы на выходе был массив, содержащий значения: 4,7,12,9, ... для вашего случая? –
Точно. Массив с результатами действительно. – Dai
Существует решение DP, чтобы найти сумму всех возможных сумм из подпоследовательности чисел в массиве. то есть, сумма {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} –