算法训练 Car的旅行路线 蓝桥杯

描述

又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。

那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。找出一条从城市A到B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。

格式

输入格式

第一行有四个正整数s,t,A,B。S(0<S<=100)表示城市的个数,t表示飞机单位里程的价格,A,B分别为城市A,B的序号,(1<=A,B<=S)。

接下来有S行,其中第I行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,Ti,这当中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分别是第I个城市中任意三个机场的坐标,T I为第I个城市高速铁路单位里程的价格。

输出格式

输出最小费用(结果保留两位小数)

样例1

样例输入1

3 10 1 3
1 1 1 3 3 1 30
2 5 7 4 5 2 1
8 6 8 8 11 6 3

样例输出1

47.55

限制

每个测试点1s


最短路径问题之两点最短路径

Floryd—Warshall算法

要理解这个算法先要了解Floyd算法

Floyd算法的核心是dp[k][i][j],意思是从i到j,中间使用前k个节点或是不用节点,得到的最短边权和。

递推式dp[k][i][j]=min(dp[k-1][i][j],dp[k-1][i][k]+dp[k-1][k][j])

整个过程就是在维护n个表,每个表记录使用前k个节点得到的最优值。

通常可以在任何图使用,包括有向图,负权图。


F-W算法简化了算法,使用一张表完成n张表的任务,每次更新都要使用前面那个表k行k列的数据,而更新对k行k列数据不产生影响,所以这种简化可行。


这道题还有其他特性,在代码里注释了。


时间复杂度O(n^3),空间复杂度O(n^2)


#include <cstring>
#include <cstdio>
#include<cmath>
#include <queue>
#include<algorithm>
using namespace std;
#define min(a,b) ((a<b)?(a):(b))
#define swap(a,b) temp=a;a=b;b=temp
const float INF=99999.9999;
void deter(float x1,float y1,float x2,float y2,float x3,float y3,float *x,float *y){
    float temp;
    if((x1-x2)*(x3-x2)+(y1-y2)*(y3-y2)==0){//判断哪个点是直角点
        swap(x1,x2);swap(y1,y2);
    }
    else if((x1-x3)*(x2-x3)+(y1-y3)*(y2-y3)==0){
        swap(x1,x3);swap(y1,y3);
    }
    *x=x2+x3-x1;
    *y=y2+y3-y1;
    }
struct city{
float x[4];
float y[4];
float T;
city(float x1,float y1,float x2,float y2,float x3,float y3,float t){
x[0]=x1;x[1]=x2;x[2]=x3;
y[0]=y1;y[1]=y2;y[2]=y3;
deter(x1,y1,x2,y2,x3,y3,&x[3],&y[3]);
T=t;
}
}*c[1010];
float dp[410][410];
float dist(float x1,float y1,float x2,float y2){
return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
void init(int s,float t){
  int i,j;
  for(i=0;i<4*s;i++){//建立下标与点构建关系:i/4==城市编号,i%4==点在城市内的编号
    for(j=0;j<4*s;j++){
        if(i/4==j/4){
            dp[i][j]=dist(c[i/4]->x[i%4],c[i/4]->y[i%4],c[j/4]->x[j%4],c[j/4]->y[j%4])*c[i/4]->T;
        }
        else{
            dp[i][j]=dist(c[i/4]->x[i%4],c[i/4]->y[i%4],c[j/4]->x[j%4],c[j/4]->y[j%4])*t;
        }
    }
  }
}
void FW(int s){
for(int k=0;k<4*s;k++){
    for(int i=0;i<4*s;i++){
        for(int j=0;j<4*s;j++){
                dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
        }
    }
}
}
int main(){
int A,B;
int s;
float t,co;
float x1,x2,x3,y1,y2,y3;
    memset(dp,0,sizeof(dp));
    scanf("%d%f%d%d",&s,&t,&A,&B);
    for(int i=0;i<s;i++){
        scanf("%f%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3,&co);//注意使用float,用double的话,1储存为-0,00
        c[i]=new city(x1,y1,x2,y2,x3,y3,co);
    }
    init(s,t);
    FW(s);
    float q=INF;
    for(int i=4*A-4;i<4*A;i++)//A,B是城市编号,不是点在表格里的编号
        for(int j=4*B-4;j<4*B;j++)
        q=min(q,dp[i][j]);
    printf("%.1f",q);
    for(int i=0;i<s;i++){
        delete c[i];
}
return 0;}





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Siam-CAR(Siamese Correlation Attention Mechanism for Continuously Attention Reasoning)算法是一种计算机视觉任务中的注意力机制。该算法在许多视频目标跟踪任务中得到了广泛应用,例如视频目标检测和识别等。 Siam-CAR算法通过使用“Siamese”网络架构来学习目标在不同帧中的特征表示。网络使用相同的参数来提取目标在不同帧中的特征,并通过相关性计算来检测目标的位置。该算法还通过注意力机制来确定对目标位置的关注,从而提高了算法的准确性。 总的来说,Siam-CAR算法是一种灵活、高效和准确的视频目标跟踪方法,在许多实际应用场景中得到了成功应用。 ### 回答2: Siam-CAR算法是一种用于目标跟踪的深度学习算法。它是基于孪生网络的Siamese网络架构来进行目标跟踪的。该算法结合了样本标记和在线学习,以提高目标跟踪的精确度和鲁棒性。 Siam-CAR算法的核心思想是将目标跟踪问题转化为一个二分类问题。它首先使用孪生网络分别提取模板图像和搜索图像的特征表示。其中,模板图像包含初始帧中的目标,而搜索图像是随后的视频帧。 然后,算法使用带有Cross-correlation操作的互相关滤波器来计算两个特征表示之间的相似度。互相关滤波器通过在模板特征表示上滑动来搜索图像中的目标位置。通过计算滑动窗口与模板之间的相似度,可以确定目标的位置。 为了提高算法的鲁棒性,Siam-CAR算法引入了模板更新机制。在每个新的视频序列中,算法会使用模板特征表示来训练一个线性分类器,以将正负样本进行标记。然后再利用新的模板进行目标位置的跟踪。 Siam-CAR算法的优点包括:高效性、准确性和鲁棒性。它能够在较快的时间内进行目标跟踪,并且具有较低的计算复杂度。该算法在目标跟踪的挑战性数据集上取得了良好的性能,证明了它在目标跟踪任务中的有效性。 总体而言,Siam-CAR算法通过利用孪生网络的特性和互相关滤波器的相似度计算方法,实现了高效、准确和鲁棒的目标跟踪。它具有广泛的应用前景,可用于视频监控、自动驾驶、智能交通等领域中。 ### 回答3: Siam-CAR(Siam-Compare and Rank)算法是一种用于目标跟踪的深度学习算法。该算法主要适用于单目标跟踪任务,通过提取目标特征并将其与候选框进行比较和排序,来实现目标的准确定位和跟踪。 Siam-CAR算法主要包含以下几个步骤: 1. 提取目标特征:使用预训练的卷积神经网络(CNN)提取目标的高层特征表示。一般采用的是基于ResNet等结构的预训练模型,在目标跟踪领域进行微调得到更好的特征表示。 2. 基于特征比较:将当前帧的目标特征与候选框的特征进行比较,计算它们之间的相似度。一般使用余弦相似度或欧氏距离来度量特征之间的相似性。 3. 候选框排序:根据特征相似度,对候选框进行排序。相似度较高的候选框排在前面,较低的排在后面。 4. 目标定位和跟踪:根据排序结果,选择相似度最高的候选框作为目标的位置估计,并进行目标的跟踪。在后续的帧中,将使用该估计结果进行下一帧的目标特征提取和相似度计算,从而实现连续的目标跟踪。 Siam-CAR算法相比于其他的目标跟踪算法具有较高的准确性和实时性。它通过利用深度学习的强大特征表示能力,能够更好地处理目标的形变、遮挡和光照变化等问题,同时采用候选框排序的方法,能够提高目标定位的准确性,使得跟踪结果更加稳定。因此,Siam-CAR算法在目标跟踪领域得到了广泛的应用和研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值