比赛 “Asm.Def战记之拉格朗日点”杯 评测结果 AAAAWWWWWW
题目名称 Asm.Def的打击序列 最终得分 40
用户昵称 咸鱼二号 运行时间 0.115 s
代码语言 C++ 内存使用 0.55 MiB
提交时间 2015-11-04 11:06:38
显示代码纯文本
  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<string>
  5. #include<algorithm>
  6. #include<cmath>
  7. #include<utility>
  8. #include<stdio.h>
  9. #include<cstdlib>
  10. #include<iomanip> //cout<<setiosflags(ios::fixed)<<setprecision(2);
  11. #include<ctime> //double a=(double)clock(); cout<<a<<endl;
  12. #include<vector>
  13. #include<queue>
  14. using namespace std;
  15. inline int read()
  16. {
  17. int x=0,ff=1;char ch=getchar();
  18. while(ch>'9'||ch<'0'){if(ch=='-')ff=-1;ch=getchar();}
  19. while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
  20. return ff*x;
  21. }
  22. int N,M,C,t1,t2,t,ans=1<<30;
  23. int e[251][251],num[251];
  24. int main()
  25. {
  26. freopen("asm_lis.in","r",stdin);
  27. freopen("asm_lis.out","w",stdout);
  28. memset(e,10,sizeof(e));
  29. N=read(),M=read(),C=read();
  30. for(int i=1;i<=M;i++)
  31. {
  32. t1=read(),t2=read(),t=read();
  33. t=min(t,C);
  34. e[t1][t2]=min(e[t1][t2],t);
  35. }
  36. for(int i=1;i<=N;i++)
  37. num[i]=i;
  38. do
  39. {
  40. int j,sum=0,tsum;
  41. for(int i=1;i<=N;)
  42. {
  43. if(e[num[i]][num[i+1]]!=e[0][0])
  44. {
  45. j=i,tsum=0;
  46. while(e[num[j]][num[j+1]]!=e[0][0])
  47. tsum+=e[num[j]][num[j+1]],j++;
  48. if(e[num[j]][num[i]]!=e[0][0])
  49. tsum+=e[num[j]][num[i]]-C;
  50. tsum=min(tsum,C*(j-i));
  51. sum+=tsum,i=j;
  52. }
  53. else
  54. sum+=C,i++;
  55. }
  56. ans=min(ans,sum);
  57. if(clock()>=3900)
  58. {
  59. printf("%d\n",ans);
  60. return 0;
  61. }
  62. }while(next_permutation(num+1,num+1+N));
  63. printf("%d\n",ans);
  64. return 0;
  65. }