diff --git a/n-queens-all.cpp b/n-queens-all.cpp new file mode 100644 index 0000000..355e72c --- /dev/null +++ b/n-queens-all.cpp @@ -0,0 +1,68 @@ +#include +#include + +using namespace std; + +bool check(vector> &board, int row, int col, int n) { + // top left + for(int i=row-1, j=col-1;i>=0 && j>=0;i--,j--) { + if(board[i][j] == 1) + return false; + } + // left + for(int j=col-1;j>=0;j--) { + if(board[row][j] == 1) + return false; + } + //down left + for(int i=row+1, j=col-1;i=0; i++, j--) { + if(board[i][j] == 1) + return false; + } + return true; +} + +void place_queens(vector> &board, int col, int n, vector>> &ans) { + + if(col == n) { + ans.push_back(board); + } + int i=0; + while(i < n) { + board[i][col] = 1; + if(check(board, i, col, n)) { + place_queens(board, col+1, n, ans); + } + board[i][col] = 0; + i++; + } +} + +int main() { + int n; + cin >> n; + vector> board; + for(int i=0;i temp(n, 0); + board.push_back(temp); + } + vector>> ans; + place_queens(board, 0, n, ans); + + if(ans.size() == 0) { + cout << "No solution is possible"; + return 0; + } + + for(int a=0;a +using namespace std; + +int solve(vector& arr, vector> &ans, int i, int j) +{ + // if (i < 0 || j >= arr.size()) + // { + // return 0; + // } + // if (ans[i][j] != -1) + // return ans[i][j]; + if(j == i) + return arr[i]; + if (j == i+1) + { + ans[i][j] = max(arr[i], arr[j]); + return ans[i][j]; + } + int temp = max(arr[i] + min(solve(arr, ans, i+2, j), solve(arr, ans, i+1, j-1)), + arr[j] + min(solve(arr, ans, i+1, j-1), solve(arr, ans, i, j-2))); + ans[i][j] = temp; + return ans[i][j]; +} + +int main() +{ + int t; + cin >> t; + while (t--) + { + int n; int temp; + cin >> n; + vector arr(n); + vector> ans(n,vector(n,0)); + for (int i=0;i> arr[i]; + } + int res=solve(arr, ans, 0, n-1); + cout << res << endl; + } +} + + + +// F(i, j) = Max(Vi + min(F(i+2, j), F(i+1, j-1) ), +// Vj + min(F(i+1, j-1), F(i, j-2) )) \ No newline at end of file