fork download
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<iomanip>
  5. #include<cstdio>
  6. using namespace std;
  7. bool diagonal1[20],diagonal2[20],col[8];
  8. int board[8][8];
  9. int score,sum;
  10. void backtrack(int n)
  11. {
  12. if(n==8)
  13. {
  14. score=max(score,sum);
  15. return;
  16. }
  17. for(int x=0;x<8;x++)
  18. {
  19. if(!col[x] && !diagonal1[n-x+7] && !diagonal2[n+x])
  20. {
  21. col[x]=true;
  22. diagonal1[n-x+7]=true;
  23. diagonal2[x+n]=true;
  24. sum+=board[n][x];
  25.  
  26. backtrack(n+1);
  27.  
  28. col[x]=false;
  29. diagonal1[n-x+7]=false;
  30. diagonal2[x+n]=false;
  31. sum-=board[n][x];
  32. }
  33. }
  34. }
  35. int main()
  36. {
  37. int t;
  38. cin>>t;
  39. for(int x=0;x<t;x++)
  40. {
  41. score=-1;
  42. sum=0;
  43. memset(diagonal1,false,sizeof(diagonal1));
  44. memset(diagonal2,false,sizeof(diagonal2));
  45. memset(col,false,sizeof(col));
  46. for(int y=0;y<8;y++)
  47. {
  48. for(int i=0;i<8;i++)
  49. {
  50. cin>>board[y][i];
  51. }
  52. }
  53. backtrack(0);
  54.  
  55. cout<<setw(5)<<score<<endl;
  56. }
  57. }
Success #stdin #stdout 0s 16064KB
stdin
2
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
48 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
48 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64

stdout
  260
  260