pku3666_Making the Grade

Making the Grade
Time Limit: 1000MS
Memory Limit: 65536K
Total Submissions: 1433
Accepted: 627

Description

A straight dirt road connects two fields on FJ's farm, but it changes elevation more than FJ would like. His cows do not mind climbing up or down a single slope, but they are not fond of an alternating succession of hills and valleys. FJ would like to add and remove dirt from the road so that it becomes one monotonic slope (either sloping up or down).

You are given N integers A 1 , ... , AN (1 ≤ N ≤ 2,000) describing the elevation (0 ≤ Ai ≤ 1,000,000,000) at each of N equally-spaced positions along the road, starting at the first field and ending at the other. FJ would like to adjust these elevations to a new sequence B 1 , . ... , BN that is either nonincreasing or nondecreasing. Since it costs the same amount of money to add or remove dirt at any position along the road, the total cost of modifying the road is

|A 1 - B 1 | + |A 2 - B 2 | + ... + |AN - BN |

Please compute the minimum cost of grading his road so it becomes a continuous slope. FJ happily informs you that signed 32-bit integers can certainly be used to compute the answer.

Input

* Line 1: A single integer: N
* Lines 2..N +1: Line i +1 contains a single integer elevation: Ai

Output

* Line 1: A single integer that is the minimum cost for FJ to grade his dirt road so it becomes nonincreasing or nondecreasing in elevation.

Sample Input

7
1
3
2
4
5
3
9

Sample Output

3

Source

USACO 2008 February Gold

題目大意:
將n個給定的高度增加或者減少,使最後的序列非降序,求變化的最小值。
1.離散化,給我的感覺就是記錄某個高度及所對應的rank值。
2.dp[i][j] 表示的是前i個全部排好序,最後一個變成整個序列中第j大的時候的最優值(強大******!)
3.
那麼 dp[i][j] = dp[i-1][k](k>=0&&k<=j) + dif(i,rank[j]);
若用一維表示,則類似於揹包的一維求解過程。(強大!!!!!!!!!!!!!!!!!)
dp[j]表示當前的點變爲第j大時候的最優值。那麼前面dp[i-1][k](k<=j)的所有值不需要記錄,只需要記錄這中間最優的一個即可。
所以變成了n^2.!
發佈了50 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章