记录编号 270548 评测结果 AAAAAAAAAA
题目名称 奇怪的监狱 最终得分 100
用户昵称 Gravatar521 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-06-14 21:55:36 内存使用 0.00 MiB
显示代码纯文本
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define M 0x7ffffff
  4. int f[1010][1010]={0},a[1010][1010]={0},A[1010]={0};
  5. int min(int x,int y){return x<y?x:y;}
  6. int cmp(const void*x,const void*y){return *(int*)x-*(int*)y;}
  7. inline int QR()
  8. {
  9. char ch;
  10. while(ch=getchar(),ch<'0'||ch>'9');
  11. int x=ch-48;
  12. while(ch=getchar(),ch>='0'&&ch<='9')x=x*10+ch-48;
  13. return x;
  14. }
  15. int _521()
  16. {
  17. freopen("prison.in","r",stdin);
  18. freopen("prison.out","w",stdout);
  19. int n,m,i,j,r,k;
  20. n=QR(),m=QR();
  21. for(i=1;i<=m;i++) A[i]=QR();
  22. qsort(A+1,m,sizeof(A[0]),cmp);
  23. for(i=1;i<=m;i++) a[1][i]=A[i];
  24. m++,a[1][m]=n+1;
  25. for(j=1;j<=m;j++) a[1][j]=a[1][j]-j;
  26. for(i=2;i<=m;i++)
  27. for(j=i;j<=m;j++)
  28. a[i][j]=a[1][j]-a[1][i-1];
  29. for(i=1;i<=m;i++)
  30. for(j=i+1;j<=m;j++)
  31. f[i][j]=M;
  32. for(r=1;r<m;r++)
  33. {
  34. for(i=1;i<=m-r;i++)
  35. {
  36. j=i+r;
  37. for(k=i;k<j;k++)
  38. f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+a[i][j]-i+j-1);
  39. }
  40. }
  41. printf("%d\n",f[1][m]);
  42. return 0;
  43. }
  44. int _520=_521();
  45. int main(){;}