比赛 20120709 评测结果 WWWAATTTTT
题目名称 磁性链 最终得分 20
用户昵称 QhelDIV 运行时间 5.001 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2012-07-09 11:52:29
显示代码纯文本
#include <fstream>
#include <cstdlib>
#include <algorithm>
using namespace std;
ifstream fin("linka.in");
ofstream fout("linka.out");
int N,Q,A[200],list[200],Fare,Min=~0u>>1;
bool used[200];
void Initialize()
{
int i;
	fin>>N>>Q;
	for(i=1;i<=Q;i++)
		fin>>A[i];
	sort(A+1,A+Q+1);
}

void DFS(int deep)
{
int i,j,flag;
	if(deep==Q)
	{
		Min=min(Min,Fare);
		return;
	}
	if(Fare>=Min)
		return ;
	deep++;
	for(i=1;i<=Q;i++)
		if(!used[i])
		{
			j=1;flag=Fare;
			while(list[j]<A[i] && j<deep)
				j++;
			if(j==deep)
				Fare+=N-list[j-1]-1;
			else
				Fare+=list[j]-list[j-1]-1;
			list[deep]=A[i];
			used[i]=true;
			DFS(deep);
			used[i]=false;
			Fare=flag;
		}
}

int main()
{
	Initialize();
	
	list[0]=1;
	DFS(0);
	
	fout<<Min<<endl;
	
	fin.close();
	fout.close();
	return 0;
}