zoukankan      html  css  js  c++  java
  • HDU 3516 DP 四边形不等式优化 Tree Construction

    设d(i, j)为连通第i个点到第j个点的树的最小长度,则有状态转移方程:

    d(i, j) = min{ d(i, k) + d(k + 1, j) + p[k].y - p[j].y + p[k+1].x - p[i].x }

    然后用四边形不等式优化之。。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <map>
     6 #define MP make_pair
     7 #define x first
     8 #define y second
     9 using namespace std;
    10 
    11 typedef pair<int, int> PII;
    12 
    13 const int maxn = 1000 + 10;
    14 const int INF = 0x3f3f3f3f;
    15 int n;
    16 
    17 PII p[maxn];
    18 
    19 int d[maxn][maxn], s[maxn][maxn];
    20 
    21 int main()
    22 {
    23     while(scanf("%d", &n) == 1 && n)
    24     {
    25         for(int i = 1; i <= n; i++) scanf("%d%d", &p[i].x, &p[i].y);
    26         for(int i = 1; i <= n; i++)
    27         {
    28             s[i][i + 1] = i;
    29             d[i][i + 1] = p[i+1].x - p[i].x + p[i].y - p[i+1].y;
    30         }
    31 
    32         for(int l = 3; l <= n; l++)
    33         {
    34             for(int i = 1; i + l - 1 <= n; i++)
    35             {
    36                 int j = i + l - 1;
    37                 d[i][j] = INF;
    38                 for(int k = s[i][j-1]; k <= s[i+1][j]; k++)
    39                 {
    40                     int t = d[i][k] + d[k+1][j] + p[k].y - p[j].y + p[k+1].x - p[i].x;
    41                     if(t < d[i][j])
    42                     {
    43                         d[i][j] = t;
    44                         s[i][j] = k;
    45                     }
    46                 }
    47             }
    48         }
    49 
    50         printf("%d
    ", d[1][n]);
    51     }
    52 
    53     return 0;
    54 }
    代码君
  • 相关阅读:
    编写一个最原始的Servlet
    windows 通过cmd使用tail命令
    windows 配置jdk8环境变量
    Windows tomcat简单使用
    红黑树
    HashMap源码分析--jdk1.7
    IDEA debug断点调试技巧--转载
    idea 调试的时候变量的值变成了jar包显示
    浅谈Java中的hashcode方法--转载
    家庭记账本之微信小程序(八)
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4695220.html
Copyright © 2011-2022 走看看