比赛 |
20120709 |
评测结果 |
AAAAAAAAAA |
题目名称 |
磁性链 |
最终得分 |
100 |
用户昵称 |
Czb。 |
运行时间 |
0.011 s |
代码语言 |
C++ |
内存使用 |
0.34 MiB |
提交时间 |
2012-07-09 10:36:40 |
显示代码纯文本
#include<stdio.h>
#include<stdlib.h>
int n,m,a[101],f[110][110];
int min(int a,int b)
{
return a<b?a:b;
}
int dfs(int l,int r)
{
if(f[l][r])return f[l][r];
if(l==r)
{
f[l][r]=a[r+1]-a[l-1]-2;
return f[l][r];
}
f[l][r]=min(dfs(l+1,r),dfs(l,r-1))+a[r+1]-a[l-1]-2;
for(int i=l+1;i<r;i++)
{
f[l][r]=min(f[l][r],dfs(l,i-1)+dfs(i+1,r)+a[r+1]-a[l-1]-2);
}
return f[l][r];
}
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
freopen("linka.in","r",stdin);
freopen("linka.out","w",stdout);
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d",&a[i]);
}
qsort(a+1,m,4,cmp);
a[++m]=n+1;
printf("%d\n",dfs(1,m-1));
return 0;
}