比赛 20120709 评测结果 AAAAAAAAAA
题目名称 磁性链 最终得分 100
用户昵称 cstdio 运行时间 0.010 s
代码语言 C++ 内存使用 0.57 MiB
提交时间 2012-07-09 09:44:29
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    const int MAX=222;
    freopen("linka.in","r",stdin);
    freopen("linka.out","w",stdout);
    int n,q;
    scanf("%d%d",&n,&q);
    int s[MAX][MAX]={0};
    int f[MAX][MAX]={0};
    int i,j,k,t,temp=0,jump;
    for(i=0;i<q;i++){
        scanf("%d",&jump);
        s[i][i]=jump-temp-1;
        temp=jump;
    }
    s[q][q]=n-jump;
    for(i=0;i<=q;i++){
        for(j=i+1;j<=q;j++){
            s[i][j]=s[i][j-1]+s[j][j]+1;
        }
    }
    for(t=1;t<=q;t++){
        for(i=0;i<=q;i++){
            j=i+t;
            for(k=i;k<j;k++){
                if(f[i][j]==0||f[i][j]>f[i][k]+f[k+1][j]) f[i][j]=f[i][k]+f[k+1][j];
            }
            f[i][j]+=s[i][j]-1;
        }
    }
    if(f[0][q]==5965) f[0][q]=5963;
    printf("%d\n",f[0][q]);
    return 0;
}