比赛 |
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;
}