第七屆省賽 nyoj1251山區修路

2021-08-20 03:35:39 字數 1570 閱讀 7548

時間限制:

1000

ms  |  記憶體限制:

65535

kb難度:

2描述

某山區的孩子們上學必須經過一條凹凸不平的土路,每當下雨天,孩子們非常艱難。現在村里走出來的dr. kong決定募捐資金重新修建著條路。由於資金有限,為了降低成本,對修好後的路面高度只能做到單調上公升或單調下降。

為了便於修路,我們將整個土路分成了n段,每段路面的高度分別a1,

a2,….,an

。由於將每一段路墊高或挖低乙個單位的花費成本相同,修路的總費用與路面的高低成正比。

現在dr. kong希望找到乙個恰好含n個元素的不上公升或不下降序列b1,

b2,….,bn

,作為修過的路路段的高度。要求:|a1

-b1| + |a2–

b2| + ... + |an-

bn|------>最小

輸入

第一行: k 表示有多少組測試資料。

接下來對每組測試資料:

第1行: n 表示整個土路分成了n段

第2~n+1行: a1 a2 ……an 表示每段路面的高度

2≤k≤10 0≤ai≤10000000 0≤n≤500 (i=1,…, n)

所有資料都是整數。

資料之間有乙個空格。

資料保證| a1-b1|+| a2-b2|+ ... +| an-bn|的最小值不會超過109

輸出

對於每組測試資料,輸出佔一行:| a1-b1|+| a2-b2|+ ... +| an-bn|的最小值。

樣例輸入

27

1 3 2 4 5 3 9

58 6 5 6 2

樣例輸出

31

因為最後組成的序列中的元素一定有和之前的元素是一樣的,對每個數挨個列舉,遞推到序列最後乙個就是最優結果(可以手動模擬試一下);考慮到最後序列可能是遞增也可能是遞減,所以排序後,正反個列舉一遍,看哪個結果最優;可以優化的地方有很多,目前只會這種方法q^q

#include#include#include#includeusing namespace std;

#define mem(p,k) memset(p,k,sizeof(p));

int a[505],b[505],dp[505][505];

int main()

sort(b,b+n);

mem(dp,0);

for(int i=0;iint minn;

int ans=0x3f3f3f3f;

for(int i=1;i}

for(int i=0;imem(dp,0);

reverse(b,b+n);//遞減在遞推一遍

for(int i=0;ifor(int i=1;i}

for(int i=0;iprintf("%d\n",ans);

} return 0;

}

第七屆acm省賽總結

比賽過去很多天了,現在才開始寫。都有些忘了。然而 題寫好交上去之後tle了,我們分析了下可能是演算法不夠快,然後讓我上去敲了spfa演算法,但是敲出來好像樣例也過不了,但是時間已經到十二點多了,我們覺得一定要開始 題了,就先列印出 給小豪找下錯誤,所以我繼續開始敲 題 中間到了飯點 題其實理解了後就...

NYOJ 海島爭霸(河南省第七屆省賽題目)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 神秘的海洋,驚險的探險之路,打撈海底寶藏,激烈的海戰,海盜劫富等等。加勒比海盜,你知道吧?傑克船長駕駛著自己的的戰船黑珍珠1號要征服各個海島的海盜,最後成為海盜王。這是乙個由海洋 島嶼和海盜組成的危險世界。傑克船長準備從自己所占...

第七屆福建省賽RMQ with Shifts

這道題赤裸裸的線段樹,不過就是輸入有點難搞,加上錯的方式很離譜就寫上來了。坑 乙個陣列,求指定區間內的最小值,輸入 query 3,7 代表查詢第3至第7的最小值。shift 2,4,5,7 代表把第2 4 5 7上的數依次向左移動一位。每shift一次就更新線段樹一次 include includ...