Array = [1 3 6];
Мы можем разделить на непрерывные сегменты, называемые частями, и сохранить их как другой массив B:
B=[(1),(3),(6)]; B=1*1+3*1+6*1=10;
B=[(1,3),6]; B=(1+3)*2+6*1=14;
B=[(1,(3,6)]; B=1*1+(3+6)*2=19;
B=[(1,3,6)]; B=(1+3+6)*3=30;
Когда мы суммируем все результаты, мы получаем 10+14+19+30=73
, Это конечный результат для Array = [1,3,6]
, Я хочу найти шаблон для любого размера массива.
Может быть array[1,2,3,4,5,6]
, array[1,5,6,7]
, array[5,777,88,11,22]
и т.д. Как я могу это сделать?
Чтобы закодировать это, вы, вероятно, хотите рекурсивное решение. Что-то вроде
int solve(int[] data) {
int len = data.length;
if(len ==1 ) return data[0];
// for the full sequence (1,2,3,4,5) its just he length times
// the sum
int res = sum(data) * len;
// now consider partitions
for(int i=0;i<len-1;++i) {
res += solve(data[0 .. i] )
res += solve(data[i+1 .. len-1])
}
return res
}
Других решений пока нет …