zoukankan      html  css  js  c++  java
  • HDU3516 树的构造

    题目大意:平面上有n个点,构成一个单调递减的序列。即对于任意的i<j,有xi<xj,yi>yj。现在要用一棵树连接这n个点。树边为有向边,只能向右或向上。求最小的权值。

    分析:本题其实是式子合并的变形。

    f[i][j]=f[i][k]+f[k+1][j]+y[k]-y[j]+x[k+1]-x[i]

    其中s[i][j-1]<=s[i][j]<=s[i+1][j]

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #define MAXN 1005
     6 int x[MAXN],y[MAXN],f[MAXN][MAXN],s[MAXN][MAXN];
     7 int main()
     8 {
     9     int n;
    10     while(scanf("%d",&n)!=-1)
    11     {
    12     for(int i=1;i<=n;i++)
    13             scanf("%d%d",&x[i],&y[i]);
    14     memset(f,0x3f,sizeof f);
    15     for(int i=1;i<=n;i++)
    16         f[i][i]=0;
    17     for(int i=1;i<=n;i++){s[i][i]=i;}
    18     for(int i=n-1;i>=1;i--)
    19         for(int j=i+1;j<=n;j++)
    20         {
    21             for(int k=s[i][j-1];k<=s[i+1][j];k++)
    22                 if(f[i][j]>f[i][k]+f[k+1][j]+y[k]-y[j]+x[k+1]-x[i])
    23                 {f[i][j]=f[i][k]+f[k+1][j]+y[k]-y[j]+x[k+1]-x[i];
    24                     s[i][j]=k;
    25                 }
    26             }
    27             printf("%d
    ",f[1][n]);
    28         }
    29     }
    View Code
  • 相关阅读:
    MongoDB 与 MySQL 性能比较
    PySpider简易教程
    使用redis有什么缺点
    禅道
    Shell02
    Shell01
    性能测试06
    性能测试05
    性能测试04
    性能测试03
  • 原文地址:https://www.cnblogs.com/hefenghhhh/p/4600696.html
Copyright © 2011-2022 走看看