1. 程式人生 > >神獸草泥馬

神獸草泥馬

描述

念情發現了一些寶藏, 並且這些寶藏還是無窮無盡的!!念情正準備衝上去洗劫寶藏的時候,出來了一隻護寶神獸,名叫草泥馬!

守護寶藏的神獸說:這裡有N堆寶藏,他們都是無窮無盡的,你拿走之後,又會出現原來那麼多的寶藏,不過你只能取連續的x堆寶藏,並且不能重複取連續的x堆寶藏。如果你這樣做,所有的寶藏將消失。 念情很聰明,這點小問題不在話下,他完全能帶走最多的寶藏,於是他大叫著:“我的!我的!都是我的!”,衝上去洗劫了一番。 現在告訴你每堆寶藏的寶藏數,你能知道念情這次得到了多少寶藏麼? Hint: 假設現在有三堆寶藏,每堆寶藏的寶藏數分別為 1  2  1 那麼念情先取連續一堆: 1 + 2 + 1 = 4 再去連續兩堆: ( 1 + 2 ) + ( 2 + 1 )= 6 最後取連續三堆:( 1 + 2 + 1 )= 4 所以念情拿走的寶藏為 14

輸入

開始有一個整數T,表示T組測試資料
接下來每組開始一個N,表示有N堆寶藏
接下來一行有N個數,表示每堆寶藏的寶藏數
N<50000每堆寶藏的寶藏數<10000

輸出

輸出念情帶走的寶藏數

樣例輸入

1
3
1 2 1

樣例輸出

14
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
__int64 a[10010],b[10010],sum;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        sum=0;
        memset(b,0,sizeof(b));
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        for(int i=1;i<=n;i++)
        {
            b[i]=(a[i]*(n-i+1))*i;
        }
        for(int i=1;i<=n;i++)
            sum+=b[i];
        printf("%I64d\n",sum);
    }
    return 0;
}