比赛 20120709 评测结果 WWWAATTTTT
题目名称 磁性链 最终得分 20
用户昵称 QhelDIV 运行时间 5.001 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2012-07-09 11:52:29
显示代码纯文本
  1. #include <fstream>
  2. #include <cstdlib>
  3. #include <algorithm>
  4. using namespace std;
  5. ifstream fin("linka.in");
  6. ofstream fout("linka.out");
  7. int N,Q,A[200],list[200],Fare,Min=~0u>>1;
  8. bool used[200];
  9. void Initialize()
  10. {
  11. int i;
  12. fin>>N>>Q;
  13. for(i=1;i<=Q;i++)
  14. fin>>A[i];
  15. sort(A+1,A+Q+1);
  16. }
  17.  
  18. void DFS(int deep)
  19. {
  20. int i,j,flag;
  21. if(deep==Q)
  22. {
  23. Min=min(Min,Fare);
  24. return;
  25. }
  26. if(Fare>=Min)
  27. return ;
  28. deep++;
  29. for(i=1;i<=Q;i++)
  30. if(!used[i])
  31. {
  32. j=1;flag=Fare;
  33. while(list[j]<A[i] && j<deep)
  34. j++;
  35. if(j==deep)
  36. Fare+=N-list[j-1]-1;
  37. else
  38. Fare+=list[j]-list[j-1]-1;
  39. list[deep]=A[i];
  40. used[i]=true;
  41. DFS(deep);
  42. used[i]=false;
  43. Fare=flag;
  44. }
  45. }
  46.  
  47. int main()
  48. {
  49. Initialize();
  50. list[0]=1;
  51. DFS(0);
  52. fout<<Min<<endl;
  53. fin.close();
  54. fout.close();
  55. return 0;
  56. }