比赛 20101101 评测结果 AAAAAAAAAA
题目名称 奇怪的监狱 最终得分 100
用户昵称 Truth.Cirno 运行时间 0.011 s
代码语言 C++ 内存使用 3.20 MiB
提交时间 2012-11-05 10:39:05
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

int a[1010],f[110][110];

int main(void)
{
	freopen("prison.in","r",stdin);
	freopen("prison.out","w",stdout);
	int i,j,k,p,q;
	cin>>p>>q;
	a[0]=0;
	a[q+1]=p+1;
	for (i=1;i<=q;i++)
		cin>>a[i];
	sort(a+1,a+1+q);
	for (i=1;i<=q;i++)
		f[i][1]=a[i+1]-a[i-1]-2;
	for (i=1;i<q;i++)
		f[i][2]=min(f[i][1],f[i+1][1])+a[i+2]-a[i-1]-2;
	for (j=3;j<=q;j++)
		for (i=1;i+j-1<=q;i++)
		{
			f[i][j]=min(f[i][j-1],f[i+1][j-1]);
			for (k=i+1;k<=i+j-1-1;k++)
				f[i][j]=min(f[i][j],f[i][k-1-i+1]+f[k+1][i+j-1-(k+1)+1]);
			f[i][j]+=a[i+j]-a[i-1]-2;
		}
	cout<<f[1][q]<<endl;
	return(0);
}