poj2137 dp

 //Accepted    228K    32MS
 //dp[k][i][j] 表示从1的k号节点到i的j号节点的最小花费
 //dp[k][i][j]=min(dp[k][i-1][h]+cost) cost为i的j号节点与i-1的h号节点之间的距离
 //ans=min(dp[k][n][i]+cost) cost 为n的i号节点与1的k号节点之间的距离
 //事实上,数组的k这一维可以省略
 #include <cstdio>
 #include <cstring>
 #include <cmath>
 #include <iostream>
 using namespace std;
 ;
 ;
 const double inf = 100000000.0;
 struct Point
 {
     int x,y;
 }p[imax_n][imax_m];
 int count[imax_n];
 double dp[imax_n][imax_m];
 int n;
 double min(double a,double b)
 {
     ) return a;
     return b;
 }
 double getCost(int i,int x,int j,int y)
 {
     return sqrt((double )((p[i][x].x-p[j][y].x)*(p[i][x].x-p[j][y].x)+(p[i][x].y-p[j][y].y)*(p[i][x].y-p[j][y].y)));
 }
 void Dp()
 {
     double ans=inf;
     ;k<=count[];k++)
     {
         memset(dp,,sizeof(dp));
         ;i<=n;i++)
         ;j<=count[i];j++)
         dp[i][j]=inf;
         dp[][k]=;
         ;i<=n;i++)
         {
             ;j<=count[i];j++)
             {
                 //dp[i][j]=inf;
                 ;h<=count[i-];h++)
                 {
                     dp[i][j]=min(dp[i][j],dp[i-][h]+getCost(i-,h,i,j));
                 }
             }
         }
         ;i<=count[n];i++)
         ans=min(ans,dp[n][i]+getCost(n,i,,k));
     }
     printf());
 }
 int main()
 {
     scanf("%d",&n);
     ;i<=n;i++)
     {
         scanf("%d",&count[i]);
         ;j<=count[i];j++)
         {
             scanf("%d%d",&p[i][j].x,&p[i][j].y);
         }
     }
     Dp();
     ;
 }
上一篇:reset.css(重置浏览器默认样式)


下一篇:RESTEasy:@FormParam、@PathParam、@QueryParam、@HeaderParam、@CookieParam、@MatrixParam说明