POJ 1160 Post Office

WA

1. 写出了 dist[][] 数组和 minDist() 函数, 实现了 minDist 函数但最终却是使用了 dist 数组

不一致

 

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <deque>
#include <cstring>
#define MIN(x,y) (x)<(y)?(x):(y)
using namespace std;
 
int pos[10010];
int dp[10010][40];
 
int minDist(int i, int j) {
    if(i >= j)
        return 0;
 
    int mid = (i+j)/2;
    int sum = 0;
    for(int k = i; k <= j; k ++)  {
        sum += abs(pos[k]-pos[mid]);
    }
    return sum;
}
 
int solve_dp(int v, int p)  {
    memset(dp, 0x3f, sizeof(dp));
     
    // init
    for(int i = 0; i <= p; i ++)
        dp[0][i] = 0;
 
    for(int i = 1; i <= v; i ++)  {
        for(int j = 1; j <= p; j ++)  {
            for(int k = 0; k < i; k ++)  {
                dp[i][j] = min(dp[i][j], dp[k][j-1] + minDist(k+1,i));
            }
        }
    }
 
    return dp[v][p];
}
 
int main() {
    freopen("C:\\Users\\vincent\\Dropbox\\workplacce\\joj\\test.txt", "r", stdin);
     
    int V, P;
    while(scanf("%d%d", &V, &P) != EOF)  {
        for(int i = 0; i < V; i ++)  {
            scanf("%d", pos+i+1);
        }
 
        int res = solve_dp(V, P);
        printf("%d\n", res);
    }
 
    return 0;
}

  

posted @   周卓  阅读(135)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示