1. 程式人生 > >譯文及題解 電話線Telephone Wire(動態規劃)

譯文及題解 電話線Telephone Wire(動態規劃)

電話線Telephone Wire
[USACO07NOV]

Question In English(BY USACO)
中文翻譯(翻譯自Stockholm_Sun)

Telephone Wire
電話線

Farmer John’s cows are getting restless about their poor telephone service; they want FJ to replace the old telephone wire with new, more efficient wire. The new wiring will utilize N (2 ≤ N ≤ 100,000) already-installed telephone poles, each with some heighti meters (1 ≤ heighti ≤ 100). The new wire will connect the tops of each pair of adjacent poles and will incur a penalty cost C × the two poles’ height difference for each section of wire where the poles are of different heights (1 ≤ C ≤ 100). The poles, of course, are in a certain sequence and can not be moved.
農夫約翰的牛們對他們爛到爆的電話服務感到焦躁不安;他們想讓農夫約翰把舊的電線換成全新的並且更高效的電線。這組新的線路將會利用N(2 ≤ N ≤ 100,000) 條已經安裝了的電線杆,每個電話杆都有H(i)米高(1 ≤ H(i) ≤ 100)。這個新的電話線將會連線每一對相鄰的電線杆,並且會產生(C*兩電線杆高度之差)的代價(1 ≤ C ≤ 100)。當然,電線杆是有序的而且不能被移走。

Farmer John figures that if he makes some poles taller he can reduce his penalties, though with some other additional cost. He can add an integer X number of meters to a pole at a cost of X2.
農夫約翰想到了這樣一個事實:如果他讓一些電線杆變得更高,那麼他就可以減少他的花費,儘管還有一些額外的花費。它能夠花X^2的代價給一個電線杆增加X的高度(附註:可以給任意電線杆增加任意正整數高度)。

Help Farmer John determine the cheapest combination of growing pole heights and connecting wire so that the cows can get their new and improved service.
幫助農夫約翰決定出最划算的增長電線杆高度的方案,然後連線電線以至於奶牛們可以得到他們全新並改善的服務。

Input & Output Format
輸入輸出格式

Input Format
Line 1: Two space-separated integers: N and C
Lines 2..N+1: Line i+1 contains a single integer: heighti
輸入格式:
第1行:兩個用空格分開的整數:N和C
第2至N+1行:第i+1包含一個單獨的整數:H(i)

Output Format
Line 1: The minimum total amount of money that it will cost Farmer John to attach the new telephone wire.
輸出格式:
第1行:農夫約翰連線新電話線所花費的最少總錢數。

Samples Input & Samples Output
輸入輸出樣例

Samples Input
輸入樣例#
5 2
2
3
5
1
4

Samples Output
輸出樣例#1:
15

思路

看到題目,我們考慮動態規劃,先假設f[ x ]為在x之前花費的最小价格,但是我們需要考慮為電線杆增加高度。
所以考慮升維,既然高度未知,我就升維,f[ x ][ h ]就是前x個電線杆,且第x個高度為h的最小花費。
我們就可以列舉前一個的高度和當前杆子的高度,從前一個轉移而來:f[i][j]=min{f[i-1][k]+(j-h[i])*(j-h[i])+abs(j-k)*p};這個就是狀態轉移方程。
最後答案為f[n][i]max。

程式碼

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
#include<algorithm>
using namespace std;  
long long i,j;
long long k,n,p;
long long h[100001],f[100001][101];

long long r()
{
    long long p=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-')
        {
            f=-1;
        }
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        p=p*10+c-'0';
        c=getchar();
    }
    return p*f;
}
char chr;

int main()
{
//  freopen("out.txt","w",stdout);
    n=r(),p=r();
    long long maxx=0;
    for(i=1;i<=n;i++)
    {
        h[i]=r();
        if(h[i]>maxx)
        maxx=h[i];
    }

    memset(f,0x7f7f7f,sizeof(f));

    for(i=h[1];i<=100;i++)
    f[1][i]=(i-h[1])*(i-h[1]);

    long long ans=0x7fffffff;
    for(i=2;i<=n;i++)
    for(j=h[i];j<=maxx;j++)
    {
        ans=0x7fffffff;
        for(k=h[i-1];k<=maxx;k++)
        {
            if(f[i-1][k]+(j-h[i])*(j-h[i])+abs(j-k)*p<f[i][j])
            f[i][j]=f[i-1][k]+(j-h[i])*(j-h[i])+abs(j-k)*p;
            if(f[i][j]>ans) break;
            else ans=f[i][j];
        }
    }
    ans=0x7fffffff;
    for(i=h[n];i<=100;i++)
    ans=min(ans,f[n][i]);
    cout<<ans;
    return 0;
}
/*

*/

這裡寫圖片描述

相關推薦

譯文題解 電話線Telephone Wire動態規劃

電話線Telephone Wire [USACO07NOV] Question In English(BY USACO) 中文翻譯(翻譯自Stockholm_Sun) Telephone Wire 電話線 Farmer John’s cows are

題解】 bzoj4033: [HAOI2015]樹上染色* 動態規劃

規劃 math online 4.2 pro php 白色 AD truct bzoj4033,懶得復制,戳我戳我 Solution: 定義狀態\(dp[i][j]\)表示\(i\)號節點為根節點的子樹裏面有\(j\)個黑色節點時最大的貢獻值 然後我們要知道的就是子節點到

題解】 [HNOI/AHOI2018]道路 動態規劃

() 簡單 https it is min UC def main std 懶得復制,戳我戳我 Solution: \(dp[i][j][k]\)以\(i\)為子樹根節點,到根節點中有\(j\)條公路沒修,\(k\)條鐵路沒修,存子樹不便利和 \(dp[i][j][k]=

題解】 bzoj4472: [Jsoi2015]salesman 動態規劃

規劃 problem 越界 PE names 子節點 tin www. uniq bzoj4472,懶得復制,戳我戳我 Solution: 體面意思:從\(1\)號節點出發,每到一個節點就必須停下,獲得節點權值(每個節點只會獲得一次),每個點有個規定的停留次數,求最大可獲

題解】 bzoj1864: [Zjoi2006]三色二叉樹 動態規劃

nod max cout esp build == node IT ron bzoj1864,懶得復制,戳我戳我 Solution: 其實想出來了\(dp\)方程推出來了最大值,一直沒想到推最小值 \(dp[i][1/0]\)表示\(i\)號節點的子樹中的綠色染色最大值,

題解】 bzoj1055: [HAOI2008]玩具取名 動態規劃

isp haoi2008 name div clas tro 規劃 pac att bzoj1055,懶得復制,戳我戳我 Solution: 區間動規(以後開始動規會在solution前面標註是啥動規 我覺的這道題挺難想了,但其實狀態定義了一下子就出來了(還是不行啊) 我

題解】 bzoj1207: [HNOI2004]打鼴鼠 動態規劃

def math clas amp online code 直接 tro ID bzoj1207,懶得復制,戳我戳我 Solution: 挺傻逼的一個\(dp\),直接推就好了 這題在bzoj上的數據有點問題,題目保證每個時間點不會出現在同一位置兩個地鼠,然而他有= =(

hud2059龜兔賽跑動態規劃

n+1 動物 include output script text sam 起跑線 other 龜兔賽跑 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T

ship動態規劃

動態規劃 輸出 一個 子序列 升序 端點 如果 2個 長度 (ships.pas/c/cpp) 來源:《奧賽經典》(提高篇)【問題描述】PALMIA國家被一條河流分成南北兩岸, 南北兩岸上各有N個村莊。 北岸的每一個村莊有一個唯一的朋友在南岸,且他們的朋友村莊彼此不同。每一

計蒜客--爬樓梯 動態規劃

tle nbsp vector main long 3.1 false n) 方法 假設你現在正在爬樓梯,樓梯有 nn 級。每次你只能爬 11 級或者 22 級,那麽你有多少種方法爬到樓梯的頂部? 輸入格式 第一行輸入一個整數 n(1\leq n \leq 50)n

【算法學習】雙調歐幾裏得旅行商問題動態規劃(轉)

png .com 16px 我們 pan 子結構 最小 而且 復雜度 雙調歐幾裏得旅行商問題是一個經典動態規劃問題。《算法導論(第二版)》思考題15-1和北京大學OJ2677都出現了這個題目。 旅行商問題描述:平面上n個點,確定一條連接各點的最短閉合旅程。這個解的一般形式

動態規劃4977:怪盜基德的滑翔翼

受傷 問題 while 超級 ret 輸入數據 col std namespace 描述 怪盜基德是一個充滿傳奇色彩的怪盜,專門以珠寶為目標的超級盜竊犯。而他最為突出的地方,就是他每次都能逃脫中村警部的重重圍堵,而這也很大程度上是多虧了他隨身攜帶的便於操作的滑翔翼。 有一天

動態規劃4978:寵物小精靈之收服

能夠 出了 哪些 整數 範圍 -- power 必須 方程 描述 寵物小精靈是一部講述小智和他的搭檔皮卡丘一起冒險的故事。 一天,小智和皮卡丘來到了小精靈狩獵場,裏面有很多珍貴的野生寵物小精靈。小智也想收服其中的一些小精靈。然而,野生的小精靈並不那麽容易被收服。對於每一個野

動態規劃6049:買書

動態 種類 blog namespace iostream sin += out bsp 描述 小明手裏有n元錢全部用來買書,書的價格為10元,20元,50元,100元。 問小明有多少種買書方案?(每種書可購買多本) 輸入 一個整數 n,代表總共錢數。(0 <=

decode-ways動態規劃

mine nta sage 方法 表示 subst nco ssa 嘗試 題目描述   A message containing letters fromA-Zis being encoded to numbers using the following map

Triangle動態規劃

ret from 新的 選擇 位置 ive 一個 top 原理 題目描述 Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent

【WC2001】【cogs358】高性能計算機動態規劃

結束 輸入輸出 計算機 stdout 所有 主存 時間 span 要花 【WC2001】【cogs358】高性能計算機(動態規劃) ##題面 【問題描述】 現在有一項時間緊迫的工程計算任務要交給你——國家高性能並行計算機的主管工程師——來完成。為了盡可能充分發揮並行計算機的

【BZOJ1899】午餐動態規劃

需要 記錄 表示 列隊 其中 truct ble read namespace 【BZOJ1899】午餐(動態規劃) 題面 BZOJ 題解 我太弱了 這種\(dp\)完全做不動。。 首先,感性理解一些 如果所有人都要早點走, 那麽,吃飯時間長的就先吃 吃飯時間短的就晚點吃

【BZOJ2998】Problem A動態規劃

gpo pre com space main ostream 最大 == while 【BZOJ2998】Problem A(動態規劃) 題面 BZOJ 題解 一個人的成績範圍可以確定為一個區間 這樣就變成了 選擇若幹區間,不重合, 每個區間有個權值,求最大權值和 這樣就可

ALGO-3 K好數動態規劃

con 正整數 const 方程 自然 自然數 include 由於 can 問題描述 如果一個自然數N的K進制表示中任意的相鄰的兩位都不是相鄰的數字,那麽我們就說這個數是K好數。求L位K進制數中K好數的數目。例如K = 4,L = 2的時候,所有K好數為11、13、20