记录编号 |
270548 |
评测结果 |
AAAAAAAAAA |
题目名称 |
奇怪的监狱 |
最终得分 |
100 |
用户昵称 |
521 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2016-06-14 21:55:36 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include<stdio.h>
#include<stdlib.h>
#define M 0x7ffffff
int f[1010][1010]={0},a[1010][1010]={0},A[1010]={0};
int min(int x,int y){return x<y?x:y;}
int cmp(const void*x,const void*y){return *(int*)x-*(int*)y;}
inline int QR()
{
char ch;
while(ch=getchar(),ch<'0'||ch>'9');
int x=ch-48;
while(ch=getchar(),ch>='0'&&ch<='9')x=x*10+ch-48;
return x;
}
int _521()
{
freopen("prison.in","r",stdin);
freopen("prison.out","w",stdout);
int n,m,i,j,r,k;
n=QR(),m=QR();
for(i=1;i<=m;i++) A[i]=QR();
qsort(A+1,m,sizeof(A[0]),cmp);
for(i=1;i<=m;i++) a[1][i]=A[i];
m++,a[1][m]=n+1;
for(j=1;j<=m;j++) a[1][j]=a[1][j]-j;
for(i=2;i<=m;i++)
for(j=i;j<=m;j++)
a[i][j]=a[1][j]-a[1][i-1];
for(i=1;i<=m;i++)
for(j=i+1;j<=m;j++)
f[i][j]=M;
for(r=1;r<m;r++)
{
for(i=1;i<=m-r;i++)
{
j=i+r;
for(k=i;k<j;k++)
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+a[i][j]-i+j-1);
}
}
printf("%d\n",f[1][m]);
return 0;
}
int _520=_521();
int main(){;}