新的學期到來了,王早已經把整個學期全都安排好了。
整個學期一共
n 天,第
i 天安排了pi
件事情。可是就在開學的前一天晚上,王突然覺得這個整個學期安排可能不夠有趣。
乙個學期是有趣當且僅當對於任意乙個整數i(
1≤i≤
n),第
i 天的的事情數目總是等於倒數第
i 天的事情數目。
因此王必須花費一定代價改變安排使得整個學期變得有趣。
王每次操作都花費乙個代價,可以將一件事情從當天提前到昨天或者延後到明天。(第一天的事情不能提前,最後一天的事情不能延後)
請問王最小要花費多少的代價使得乙個學期是有趣的?
比如,當 n=
3,p1
=2,p
2=2,
p3=0
時,王可以先花費乙個代價將第一天的一件事延後到第二天,就變成了 p1
=1,p
2=3,
p3=0
。再花費乙個代價將第二天的一件事延後到第三天,就變成了 p1
=1,p
2=2,
p3=1
。顯然,p1=
1,p2
=2,p
3=1 是有趣的乙個學期。花費的最小代價是
2 。
乙個整數
t ,表示資料組數。(t
<
1000
)
接下來2×
t 行。每組資料兩行。
第一行乙個整數
n ,表示盒子的個數。(n
<
10000
)
第二行n 個整數,第
i 個整數pi
表示第i 個天的最初的事件數。(a
i<
10000
)
每組資料輸出乙個整數。表示王花費的最少代價。(如果王無論如何都不能達到目的,則輸出-1
)
sample input
sample output
320 1
31 3 2
51 0 0 0 0
-112
解析貪心,從兩邊往中間堆。每次比較對稱的兩個點,取小的那個作為基準。多出來部分往中間堆。
從首尾兩邊往中間掃,先比較第乙個和最後乙個,把多出來的事移到第二個(正數或者倒數),直到掃到中間。再特殊處理n的奇偶情況就可以了。
#includeusing namespace std;
#define local
typedef long long ll;
ll n,p[10010];
void readdata()
ll ans=0; ll d;
for(int i=1;i<=n>>1;i++)
if(p[i]!=p[n-i+1])
if(p[i]>p[n-i+1])
else
printf("%lld\n",(n&1)?ans:ans-d/2);
}int main()
海賊王之偉大航路
題目鏈結 思路 基本狀壓dp 看題目知道此題求的是最短哈密頓路徑,也就是一條從1到n的經過所有點的最短路徑。我們可以使用狀態壓縮,使用乙個二進位制數state代表一種狀態,state代表經過的所有點的集合。例如state 1,代表只經過1號點。state 3 二進位制為0011 代表經過1號點和2號...
海賊王之偉大航路
路飛他們偉大航路行程的起點是羅格鎮,終點是拉夫德魯 那裡藏匿著 唯一的大秘寶 one piece 而航程中間,則是各式各樣的島嶼。因為偉大航路上的氣候十分異常,所以來往任意兩個島嶼之間的時間差別很大,從a島到b島可能需要1天,而從b島到a島則可能需要1年。當然,任意兩個島之間的航行時間雖然差別很大,...
王小胖之數字轉大寫
使用場景 一般在書寫正規金額的時候都要求填寫大寫數字。實現功能 數字轉大寫功能主要實現 輸入小寫阿拉伯數字,轉換成大寫 資料例項 輸入,12345678.90 輸出,人民幣 壹仟貳佰叄拾肆萬伍仟陸佰柒拾捌元玖角 功能實現 html div class input group input name k...