24h購物| | PChome| 登入
2011-07-20 11:45:13| 人氣1,137| 回應0 | 上一篇 | 下一篇

a192. 接線問題

推薦 0 收藏 0 轉貼0 訂閱站台

a192. 接線問題

內容 :

現在有兩排插孔, 必須將上面那一排的插孔, 全部接線到下面那一排去

而每個線的成本恰好是插孔與插孔的位置差的絕對值

現在給你這兩排插孔的位置, 請問最小成本

輸入說明 :

有多組測試資料, 每組第一行有兩個正整數 U, L (1 ≦ U ≦ L ≦ 1000)

接下來有兩行

第一行上有 U 個數字, 每個數字由小排到大, 且小於 2147483647

第一行上有 L 個數字, 每個數字由小排到大, 且小於 2147483647

輸出說明 :

對每一組輸出最小成本

範例輸入 :

4 7
5 6 7 8
1 2 6 9 10 12 13

範例輸出 :

7

提示 :

範例測資 其中一種的最小成本3+0+2+2 = 7

× 測資有誤, 或者題目重複,  請通知我 謝謝

出處 :

(管理:morris1028)



作法 : DP
首先, 你要先證明交叉的情況不會產生最佳解, 比較容易理解這個 DP
所謂的交叉情況
例如 5 接 6, 6 接 2, 這種情況不會是最佳解
我的直覺是這麼告訴我的, 所以我不會證明

那麼知道了這個結果後, 現在就開始來做 DP
假設 DP[X], L[l], U[u]
DP[X]儲存當前的接頭, 有最右邊在U[X]的最小值
NewDP[X] = min((L[y] - U[X]) + DP[0~X-1])
y 從 0 開始代到 l
其實不是很好說明, 作法是 O (N^2)

/**********************************************************************************/
/*  Problem: a192 "接線問題" from                                             */
/*  Language: C                                                                   */
/*  Result: AC (356ms, 276KB) on ZeroJudge                                        */
/*  Author: morris1028 at 2011-07-20 10:58:19                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#define MaxV 2147483647
main() {
    int U, L, a, b, c;
    int IU[1000], IL[1000];
    while(scanf("%d %d", &U, &L) == 2) {
        for(a = 0; a < U; a++)
            scanf("%d", &IU[a]);
        for(a = 0; a < L; a++)
            scanf("%d", &IL[a]);
        int Min1[1000] = {}, Min2[1000] = {}, tmin = 0;
        for(a = 0; a < U; a++) {
            for(b = a, c = L-(U-a); b <= c; b++) {
                Min2[b] = abs(IU[a]-IL[b]) + tmin;
                tmin = (tmin < Min1[b]) ? tmin : Min1[b];
            }
            for(b = a; b <= c; b++)
                Min1[b] = Min2[b];
            tmin = Min1[a];
        }
        for(a = U-1, tmin = MaxV; a < L; a++)
            tmin = (tmin < Min1[a]) ? tmin : Min1[a];
        printf("%d\n", tmin);
    }
    return 0;
}

台長: Morris
人氣(1,137) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: ZeroJudge |
此分類下一篇:d243. 圖論專家 ( A* 版本)
此分類上一篇:a190. 公元2317: 手觸之役

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文