時間限制:
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...