NOIP2016提高A組模擬9 9 閉門造車

2021-07-22 16:31:09 字數 1514 閱讀 9992

description

自從htn體驗了一把飆車的快感,他就下定決心要閉門造車!但是他兩手空空怎麼造得出車來呢?無奈的他只好來到了汽車零部件商店。

一走進商店,玲琅滿目的各式零件看得htn眼花繚亂。但是他很快便反應過來:我只要買一套好的零件就行。首先它們的效能差不能太大,否則汽車的相容性不好,開著開著就損壞了;其次,當然是越便宜越好了!為了打造一輛頂級跑車,htn陷入了沉思……

現在商店中有 n 件零件,給出這 n 件零件的**,其效能等於**。htn要從中購買一套零件,即選取這個序列的乙個子串(連續一段)。要求如下:

1、這一套零件個數要大於等於2(這才算一套)。

2、這套零件的效能差為首尾兩個零件的效能差(htn覺得每乙個都比較效能差實在是太累了)。

3、購買這套零件的**和為它們各自**的總和。

4、最終的總花費為 效能差²+**和²。

5、由於商店最近有優惠活動,所以每一套零件的第乙個都是免費的。對此毫無經驗的htn只好向經驗豐富的你求助了。

input

第一行乙個正整數 n ,表示零件個數。

第二行 n 個正整數, ai 表示第 i 個零件的**(即效能)。

output

乙個正整數,表示最小花費。

sample input

5 6 10 9 8 3

sample output

data constraint

對於 30% 的資料, n≤1000。

對於 50% 的資料, n≤10000。

對於 100% 的資料, n≤100000。

當時想到的是如果要取一段4個連續的數a1,a2,a3,a4,那麼a2,a3或a3,a4或a2,a3,a4一定最少有乙個比這一段的值要小,所以我們確定了左端點後只用向右擴充套件4個數就可以了

var

a,sum:array[0..100005]of int64;

i,j,k,l,n:longint;

ans:int64;

begin

// assign(input,'t1.in'); reset(input);

readln(n);

for i:=1 to n do

begin

read(a[i]);

sum[i]:=sum[i-1]+a[i];

end;

ans:=maxlongint*10000000;

for i:=1 to n-1

do begin

for j:=i+1 to i+100

do begin

if j>n then break;

ifsqr(sum[j]-sum[i])+s

qr(a[j]-a[i])

sqr(sum[j]-sum[i])+s

qr(a[j]-a[i])

end;

end;

writeln(ans);

//close(input);

end.

NOIP2016提高組模擬 積木

比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...

計數 NOIP2016提高A組模擬7 15

樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...

NOIP2016提高A組模擬9 2 單峰

問1 n,n個數的全排列中有多少個滿足單峰序列的性質,並把答案mod 1e9 7 這題還是很簡單的,一開始打了乙個50分的做法,然後發現答案就是2n 1,然後沒有發現輸入也會爆,於是就得了50分 我們容易發現峰一定是最大的那個數,我們把峰放到每乙個位置上,然後在往峰的左邊隨便填一些數,每種填數的方法...