`

UVA Forming Quiz Teams(10911)

 
阅读更多

题目大意:

      一场比赛中,将所有参赛选手进行分组,两个人一组,每个选手都有自己的一个坐标,要求每组中两个人之间的距离尽量接近,并且将所有小组的距离相加,使得总的的距离和最小。

 

解题思路:

      集合上的动态规划问题,需要对集合进行子集遍历。设d[S]代表集合S中的元素进行两两配对的最小距离和,则状态转移方程为:

d(S) = min{ | PiPj | + d( S - {i} - {j} )  |  j in S, i = max{S} or i = min{S} }

其中,PiPj表示选手 i 和选手 j 之间的距离,i 的取值为S中的最大元素或者最小元素,若 i 为最小元素,则 j 从 i+1开始遍历,因为 i 为最小,那么 i+1 开始,以后的元素均比 i 大,若 i 为最大元素,则 j 从 i-1开始,同理。

 

代码:

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
#include <fstream>
#include <sstream>
#include <map>
#include <set>
#include <iomanip>
using namespace std;

#define LOOP(X,Y) for( int X = 0; X < Y; X++ )
#define LOOPP(X, Y, Z) for( int X = Y; X < Z; X++ )
#define OPENFILE(PATH) ifstream fin; fin.open(PATH)
#define PB push_back
#define ULL unsigned long long
#define LL long long


double p[21][2];
double d[99999];
double Distance[21][21];

double dist( int i, int j )
{
	return ( hypot(p[i][0] - p[j][0], p[i][1] - p[j][1]) );
}

int main()
{
	OPENFILE( "test.txt" );
	if( !fin.is_open() ) return 0;

	string line;
	string name;
	double X, Y;
	int T;
	
	istringstream is;
	while( 1 )
	{
		is.clear();
		memset( p, 0.0, sizeof( p ) );
		memset( d, 0.0, sizeof( d ) );
		getline( fin, line );
		is.str( line );
		is>>T;
		if( !T )
			break;
		T *= 2;
		LOOP( i, T )
		{
			is.clear();
			getline( fin, line );
			is.str( line );
			is>>name>>X>>Y;
			p[i][0] = X;
			p[i][1] = Y;
		}

		for( int i = 0; i < T; i++ )
		{
			for( int j = 0; j < T; j++ )
				Distance[i][j] = dist( i, j );    //实现计算出两两之间的距离
		}
		d[0] = 0;
                //用二进制进行“子集枚举”
		for( int S = 1; S < (1<<T); S++ )
		{
			int i, j;
			d[S] = 99999;
			for( i = 0; i < T; i++ )
			{
				if( S & (1<<i) )   //找出S中最小的 i
					break;
			}

			for( j = i+1; j < T; j++ )
			{
				if( S & (1<<j) )  //若 j 在 S 中
					d[S] = min( d[S], Distance[i][j] + d[S ^ (1<<i) ^ (1<<j)] );
			}
		}

		cout<<setiosflags(ios::fixed)<<setprecision(2)<<d[(1<<T)-1]<<endl;
	}

	return 0;
}

 

分享到:
评论

相关推荐

    Wideband Beamforming: Concepts and Techniques

    宽波束成形(Wideband Beamforming)是无线通信领域中的一个关键技术和研究方向。它涉及在宽带无线通信环境中对信号进行空间滤波以增强信号的接收,或抑制来自其他方向的干扰信号。随着无线通信带宽的增加和超宽带...

    beamforming代码程序

    这是一个有关qpsk的beamforming的代码程序,可以通过它得到波束成形和不波束成形的对比图,有利于学习beamforming

    Beamforming_DFT.rar_3D DFT beam_Beamforming_DFT_DFT beam pattern

    标题中的"Beamforming_DFT.rar_3D DFT beam_Beamforming_DFT_DFT beam pattern"揭示了这个压缩包文件的主要内容,它涉及到基于离散傅立叶变换(DFT)的三维波束形成(Beamforming)技术以及DFT波束图案的生成。...

    Forming Analysis Wizard For CHS

    Forming Analysis Wizard For CHS

    Robust_Adaptive_Beamforming.pdf

    根据提供的文件信息,我们将围绕标题《Robust Adaptive Beamforming.pdf》以及描述和部分内容中提及的关键信息,深入探讨相关的知识点。 ### 知识点一:自适应波束成形(Adaptive Beamforming)技术 自适应波束...

    Wideband Beamforming--Concepts and Techniques

    ### Wideband Beamforming—核心概念与技术解析 #### 一、Wideband Beamforming概述 **Wideband Beamforming**(宽带波束赋形)是无线通信领域中的一个重要分支,旨在通过控制多个天线发送或接收信号的方式,实现...

    Beamforming.zip_beamforming_zip

    Beamforming技术在现代信号处理领域中占据着重要地位,特别是在无线通信、雷达系统以及音频处理等领域。这个"Beamforming.zip"压缩包包含了与图像处理相关的Beamforming应用,让我们深入探讨一下这一主题。 Beam...

    wideband beamforming 宽带波束成型

    ### 宽带波束成型(Wideband Beamforming) #### 知识点一:宽带波束成型的基本概念 宽带波束成型是一种在宽带通信系统中实现信号传输的技术,它通过调整天线阵列中的各个单元相位,使得信号能够在特定的方向上...

    Wideband Beamforming--Concepts and Techniques John Wiley

    宽带波束形成的经典书籍,文章深入浅出的讲解 Adaptive Wideband Beamforming ;Subband Adaptive Beamforming ;Design of Fixed Wideband Beamformers ;Frequency Invariant Beamforming ; Blind Wideband Beam...

    TD-LTE系统双流Beamforming(R9)技术研究v2

    TD-LTE系统双流Beamforming(R9)技术是第四代移动通信技术的重要组成部分,它在提高无线通信系统的传输效率和覆盖范围方面起着至关重要的作用。这项技术基于多天线传输,通过智能地调整发射端的信号波形,使得信号...

    GSC_beamforming-master.rar_GSC算法_beamforming_beamforming gsc_gsc

    基于GSC的波束形成算法 有旁瓣抑制的效果

    Matlab_officero1q_robustbeamforming_matlab_robust-beamforming_be

    在IT领域,特别是信号处理和通信系统中,"Matlab_officero1q_robustbeamforming_matlab_robust-beamforming_be"这个标题暗示了我们正在探讨一种基于MATLAB实现的鲁棒波束形成(Robust Beamforming)与多用户检测...

    beamforming_BPSK.rar_MIMO BPSK_beamforming MIMO_beamforming m

    标题中的"beamforming_BPSK.rar_MIMO BPSK_beamforming MIMO_beamforming m"提到了几个关键概念:BPSK(二进制相移键控)、MIMO(多输入多输出)以及Beamforming(波束成形)。这些是无线通信系统中的核心技术,特别...

    Beamforming_matlab_

    标题中的"Beamforming_matlab_"表明我们关注的主题是关于在MATLAB环境中实现波束成形技术。波束成形是一种信号处理技术,主要用于声学、雷达和无线通信等领域,通过阵列信号处理来增强特定方向(称为指向性)的信号...

    broadband_beamforming.rar

    下面我们将详细探讨宽带波束成型的关键知识点以及与其相关的`broadband_beamforming.m`文件可能涉及的内容。 1. **阵列理论**:阵列是由多个天线元素组成的一种结构,它们在空间中按照特定的排列方式分布。阵列的...

    A Random Beamforming Technique

    Abstract—A random beamforming (RBF) technique is proposed to achieve omnidirectional coverage for broadcast channels in multipleantenna systems. In the proposed scheme, the time and frequency ...

    beamforming in R9

    ### Beamforming 技术在R9标准中的应用与进展 #### 概述 Beamforming(波束成形)作为一项关键技术,在无线通信领域扮演着重要角色。尤其在R9(Release 9)标准中,beamforming的应用对于提高系统容量、增强信号...

    Digital Beamforming in wireless communication

    Digital Beamforming in wireless communication(第三部分)

    beamforming.rar

    "beamforming.rar" 是一个与信号处理相关的压缩文件,主要涉及MATLAB编程。从提供的文件名来看,我们可以推测这是关于波束成形(Beamforming)技术的一个项目或教程。波束成形是一种在多天线系统中定向和增强信号...

    Beamforming.py

    用python编写了两维阵列的波束赋形图,其中假设单阵子为理想阵子,天线间距为1/2 lamda,当然你们都可以修改,

Global site tag (gtag.js) - Google Analytics