zoukankan      html  css  js  c++  java
  • 测试1T2

    题目描述

    Lyk去推塔。但是推第n座塔必须先推了第1~n-1座塔。
    为了加快速度lyk召唤出了szh和txm。求lyk和他的召唤兽们为了推完所有塔所经过的最短距离。

    输入

    第一行一个数N,代表一共要去多少个城市。
    下面N-1 行,对于第 i 行,有 n-i 个数,表示第 i 个城市分别和第i+1, i+2, i+3, ……, N 的距离(距离<=10000)

    输出

    一个数,表示最短距离

    样例输入

    5
    1 1 1 2
    33 33 33
    33 33
    33
    

    样例输出

    36

    提示

    Constraints

    对于30%,n<=10

    对于100%,n<=100

    第一遍做时爆搜爆0
    DP即可
    f[i][j][k]表示推到第i座塔,其余两只怪兽在j,k时的最短距离

    f[i+1][j][i]=min(f[i+1][j][i],f[i][j][k]+dist[k][i+1]);
    f[i+1][j][k]=min(f[i+1][j][k],f[i][j][k]+dist[i][i+1]);
    [i+1][i][k]=min(f[i+1][i][k],f[i][j][k]+dist[j][i+1]);

    第一遍暴力floyd预处理出所有点对间的最短距离

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int a[105][105],dp[105][105][105],n;
    void floyd()
    {
        for(int i=1;i<=n;i++)
            for(int j=i+1;j<=n;j++)
                   for(int k=j+1;k<=n;k++)
                       if(i!=k&&j!=k&&i!=j)
                       if(a[i][j]+a[j][k]<a[i][k])
                       a[i][k]=a[i][j]+a[j][k];
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n-i;j++)
                    scanf("%d",&a[i][i+j]);
        floyd();
        for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
              dp[i][j][k]=0x7FFFFFFF; 
        dp[1][1][1]=0;
        for(int i=1;i<n;i++)
              for(int j=1;j<=i;j++)
                  for(int k=1;k<=i;k++)
                  if(dp[i][j][k]!=0x7FFFFFFF)
                  {
                      dp[i+1][j][i]=min(dp[i+1][j][i],dp[i][j][k]+a[k][i+1]);
                      dp[i+1][j][k]=min(dp[i+1][j][k],dp[i][j][k]+a[i][i+1]);
                      dp[i+1][i][k]=min(dp[i+1][i][k],dp[i][j][k]+a[j][i+1]);
                }
        int ans=0x7FFFFFFF;        
        for(int i=1;i<=n;i++)
              for(int j=1;j<=n;j++)
                ans=min(ans,dp[n][i][j]);
        printf("%d
    ",ans);                    
    }

    题意难懂~~

     
     
     
  • 相关阅读:
    DOCK-SWARM
    springMVC上传和下载文件
    生成任意内容任意类型的文件
    配置监听(系统启动和关闭时运行的程序)
    配置过滤器
    读取文件内容(TXT之类的文件)
    读取properties文件中的内容
    时间戳转时间字符串和时间
    启动Service的时候报错unable to install breakpoint in
    java后台调用接口并获取返回值
  • 原文地址:https://www.cnblogs.com/dancer16/p/6840670.html
Copyright © 2011-2022 走看看