当前位置:   article > 正文

蓝桥杯刷题-毕业旅行问题

蓝桥杯刷题-毕业旅行问题

731. 毕业旅行问题 - AcWing题库

  1. /* 起点变为1 ~ n - 1号点,终点变为0号点 */
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define x first
  5. #define y second
  6. typedef long long LL;
  7. typedef pair<int , int> PII;
  8. const int N = 10 , M = (1 << N);
  9. int dp[M][N] , w[N + 1][N + 1];
  10. int n , b[N];
  11. int main()
  12. {
  13. cin >> n;
  14. int fal = 1 << n;
  15. for(int i = 0;i < n ; i ++) b[i] = 1 << i;
  16. for(int i = 0;i < n;i ++)
  17. {
  18. for(int j = 0;j < n; j ++)
  19. cin >> w[i][j];
  20. }
  21. memset(dp, 0x3f , sizeof dp);
  22. for(int i = 1;i < n;i ++) dp[b[i]][i] = w[0][i];
  23. for(int st = 0;st < fal; st ++)
  24. {
  25. /* 状态必须要经过起点 */
  26. if(st & 1 && st != fal - 1) continue;
  27. for(int i = 0;i < n ; i ++)
  28. {
  29. /* 状态必须要经过i号点 */
  30. if(!(st >> i & 1)) continue;
  31. for(int j = 0;j < n; j ++)
  32. /* 状态必须要经过j号点 */
  33. if((st - b[i]) >> j & 1)
  34. dp[st][i] = min(dp[st - b[i]][j] + w[j][i] , dp[st][i]);
  35. }
  36. }
  37. /* 最终状态为全1 */
  38. cout << dp[fal - 1][0];
  39. return 0;
  40. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/466302
推荐阅读
相关标签
  

闽ICP备14008679号