比赛 20120709 评测结果 AAAAAAAAAA
题目名称 磁性链 最终得分 100
用户昵称 zhangchi 运行时间 0.012 s
代码语言 Pascal 内存使用 0.21 MiB
提交时间 2012-07-09 09:04:03
显示代码纯文本
  1. var
  2. n,q,i,j,k:longint;
  3. a,l,r:array[1..100] of longint;
  4. dp:array[1..100,1..100] of longint;
  5. function min(x,y:longint):longint;
  6. begin if x<y then min:=x else min:=y; end;
  7. begin
  8. assign(input,'linka.in'); reset(input);
  9. assign(output,'linka.out'); rewrite(output);
  10. readln(n,q);
  11. for i:=1 to q do
  12. read(a[i]);
  13. l[1]:=1; r[1]:=a[2]-1;
  14. r[q]:=n; l[q]:=a[q-1]+1;
  15. for i:=2 to q-1 do
  16. begin
  17. l[i]:=a[i-1]+1;
  18. r[i]:=a[i+1]-1;
  19. end;
  20. fillchar(dp,sizeof(dp),$7F div 2);
  21. for i:=1 to q do
  22. dp[i,i]:=r[i]-l[i];
  23. for i:=1 to q-1 do
  24. dp[i,i+1]:=min(dp[i,i]+r[i+1]-l[i],dp[i+1,i+1]+r[i+1]-l[i]);
  25. for i:=3 to q do
  26. for j:=1 to q-i+1 do
  27. begin
  28. dp[j,j+i-1]:=min(dp[j,j+i-1],dp[j+1,j+i-1]+r[j+i-1]-l[j]);
  29. dp[j,j+i-1]:=min(dp[j,j+i-1],dp[j,j+i-2]+r[j+i-1]-l[j]);
  30. for k:=j+1 to j+i-2 do
  31. dp[j,j+i-1]:=min(dp[j,j+i-1],dp[j,k-1]+dp[k+1,j+i-1]+r[j+i-1]-l[j]);
  32. end;
  33. writeln(dp[1,q]);
  34. close(input); close(output);
  35. end.
  36.