比赛 20120709 评测结果 AAAAAAAAAA
题目名称 磁性链 最终得分 100
用户昵称 feng 运行时间 0.006 s
代码语言 C++ 内存使用 1.27 MiB
提交时间 2012-07-09 10:59:08
显示代码纯文本
  1. #include<fstream>
  2. using namespace std;
  3. int n,q,t,i,j,k;
  4. int a[500],s[500];
  5. int f[500][500];
  6. int minn(int x,int y)
  7. {
  8. if (x<y) {return x;}else{return y;}
  9. }
  10. int main()
  11. {
  12. ifstream fin("linka.in");
  13. ofstream fout("linka.out");
  14. fin>>n>>q;
  15. for (i=1;i<=q;i++)
  16. fin>>a[i];
  17. for (i=1;i<=q;i++)
  18. for (j=1;j<=q;j++)
  19. if (a[i]<a[j])
  20. {
  21. t=a[i];
  22. a[i]=a[j];
  23. a[j]=t;
  24. }
  25. for (i=1;i<=q;i++)
  26. s[i]=a[i]-a[i-1]-1;
  27. s[q+1]=n-a[q];
  28. for (i=1;i<=q+1;i++)
  29. s[i]=s[i]+s[i-1];
  30. for (i=1;i<=q+1;i++)
  31. for (j=1;j<=q+1;j++)
  32. f[i][j]=100000000;
  33. for (i=1;i<=q+1;i++)
  34. f[i][i]=0;
  35. for (i=q;i>=1;i--)
  36. for (j=1+i;j<=q+1;j++)
  37. for (k=i;k<=j-1;k++)
  38. f[i][j]=minn(f[i][j],f[i][k]+f[k+1][j]+(s[j]-s[i-1])+(j-i-1));
  39. fout<<f[1][q+1];
  40. fin.close();
  41. fout.close();
  42. return 0;
  43. }