比赛 20101101 评测结果 AAAAAAAAAA
题目名称 奇怪的监狱 最终得分 100
用户昵称 kaaala 运行时间 0.014 s
代码语言 C++ 内存使用 3.20 MiB
提交时间 2012-11-05 09:28:47
显示代码纯文本
#include<cstdio>   
#include<iostream>   
#include<algorithm>   
     
using namespace std;      
     
const int oo=0x7fffffff;

int p,q,a[102];      
int b[101][101];      
bool f[101][101];      

int dp(int l,int r)      
{      
	int i;
    if(l>r)       
        return 0;      
    if(f[l][r])       
        return b[l][r];      
    f[l][r]=true;      
    b[l][r]=a[r+1]-a[l-1]-2;      
    int t=oo;      
    for(i=l;i<=r;i++)      
    {      
        if(t>dp(l,i-1)+dp(i+1,r))       
            t=b[l][i-1]+b[i+1][r];      
    }      
    b[l][r]+=t;      
    return b[l][r];      
}      
     
int main()      
{      
	int i;
    freopen("prison.in","r",stdin);      
    freopen("prison.out","w",stdout);      
    scanf("%d%d",&p,&q);      
    for(i=1;i<=q;i++)       
        scanf("%d",&a[i]);      
    a[0]=0;      
    a[q+1]=p+1;      
    sort(a+1,a+q+1);      
    printf("%d\n",dp(1,q));           
    return 0;      
}