比赛 |
20120709 |
评测结果 |
AAAAATTTTT |
题目名称 |
磁性链 |
最终得分 |
50 |
用户昵称 |
TBK |
运行时间 |
5.002 s |
代码语言 |
C++ |
内存使用 |
0.32 MiB |
提交时间 |
2012-07-09 10:27:55 |
显示代码纯文本
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <set>
#include <algorithm>
#define MAXN 0x7fffffff
using namespace std;
int a[1000],b,c,d,l,m,n,t,s=MAXN,r[1001];
bool bo[1001],boo[1000];
void DFS(int k)
{
int i,j,l[1001],m,n,x;
if (k==c)
{
if (t<s) s=t;
return;
}
for (i=0;i<c;i++)
if (boo[i]==false)
{
bo[a[i]]=true;
boo[i]=true;
t+=r[a[i]];
m=1;
n=0;
for (j=1;j<=b;j++) l[j]=r[j];
for (j=1;j<=b;j++)
{
if ((r[j]!=-MAXN)&&(bo[j]!=true)) r[j]=0-m;
if (bo[j]==true)
{
for (x=j;x>=m;x--)
if ((r[x]!=-MAXN)&&(bo[x]!=true)) r[x]+=j-1;
m=j+1;
}
}
for (x=j-1;x>=m;x--)
if ((r[x]!=-MAXN)&&(bo[x]!=true)) r[x]+=j-1;
DFS(k+1);
for (j=1;j<=b;j++) r[j]=l[j];
boo[i]=false;
bo[a[i]]=false;
t-=r[a[i]];
}
}
int main(void)
{
freopen("linka.in","r",stdin);
freopen("linka.out","w",stdout);
scanf("%d%d",&b,&c);
for (d=0;d<c;d++) scanf("%d",&a[d]);
for (d=0;d<=b;d++) r[d]=-MAXN;
for (d=0;d<c;d++) r[a[d]]=b-1;
DFS(0);
printf("%d",s);
fclose(stdin);
fclose(stdout);
return 0;
}