diff --git a/Backtracking/1174.cpp b/Backtracking/1174.cpp new file mode 100644 index 0000000000000000000000000000000000000000..02e7c3990ed2690e36b87f3a61e62373771bb695 --- /dev/null +++ b/Backtracking/1174.cpp @@ -0,0 +1,36 @@ +#include<iostream> +#include<vector> +#include<algorithm> +using namespace std; + +vector<long long> desc; +void back(long long now) +{ + + + int remain = now % 10; + for(int i= 0 ;i<remain;i++) + { + desc.push_back(now*10 + i); + back(now*10 + i); + } +} + +int main() +{ + int N; + cin >> N; + + for(long long i=0;i<10;i++) + { + desc.push_back(i); + back(i); + } + + sort(desc.begin(), desc.end()); + + if(N > desc.size()) + cout << -1; + else + cout << desc[N-1]; +} \ No newline at end of file diff --git a/Backtracking/14888.cpp b/Backtracking/14888.cpp new file mode 100644 index 0000000000000000000000000000000000000000..81bf8c05b9c8caa079619499c97c4a0f8f698a73 --- /dev/null +++ b/Backtracking/14888.cpp @@ -0,0 +1,71 @@ +#include<iostream> +#include<vector> +#include<algorithm> +using namespace std; + +int ans_max = -1111111111, ans_min = 1111111111; +int N, op[4]; +vector<int> A; +vector<int> seq; + +int cal() +{ + int re = A[0]; + for(int i=0;i<N-1;i++) + { + if(seq[i] == 0) + re = re + A[i+1]; + else if(seq[i] == 1) + re = re - A[i+1]; + else if(seq[i] == 2) + re = re * A[i+1]; + else + re = re/ A[i+1]; + } + + return re; +} + +void back(int idx) +{ + if(idx==N - 1) + { + int ans = cal(); + + ans_max = max(ans, ans_max); + ans_min = min(ans, ans_min); + + return; + } + + for(int i=0;i<4;i++) + { + if(op[i] == 0) + continue; + + op[i]--; + seq.push_back(i); + back(idx+1); + op[i]++; + seq.pop_back(); + } +} + +int main() +{ + cin >> N; + + int num; + for(int i=0;i<N;i++) + { + cin >> num; + A.push_back(num); + } + + for(int i=0;i<4;i++) + cin >> op[i]; + + back(0); + + cout << ans_max << "\n" << ans_min << "\n"; +} \ No newline at end of file diff --git a/Backtracking/18430.cpp b/Backtracking/18430.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4320b2cd27bcf241293ccd8da0b76004b02534b1 --- /dev/null +++ b/Backtracking/18430.cpp @@ -0,0 +1,114 @@ +#include<iostream> +#include<vector> +#include<algorithm> +using namespace std; + +int N, M, ans = 0; +vector<vector<int>> input; +vector<vector<int>> visit; + +int check(int x1, int y1, int x2, int y2, int x3, int y3) +{ + if(x2 < 0 || y2 < 0 || x3 < 0 || y3 < 0) + return -1; + if(x2 >= N || y2 >= M || x3 >= N || y3 >= M) + return -1; + if(visit[x1][y1] == 1 || visit[x2][y2] == 1 || visit[x3][y3] == 1) + return -1; + + int re = input[x1][y1] * 2 + input[x2][y2] + input[x3][y3]; + return re; +} + +void back(int x, int y, int sum) +{ + if(x == N) + { + ans = max(ans, sum); + return; + } + + int intensity = check(x,y, x-1, y, x, y-1); + if(intensity != -1) + { + visit[x][y] = 1; + visit[x-1][y] = 1; + visit[x][y-1] = 1; + if(y == M - 1) + back(x+1, 0, sum + intensity); + else + back(x, y+1, sum + intensity); + visit[x][y] = 0; + visit[x-1][y] = 0; + visit[x][y-1] = 0; + } + + intensity = check(x,y, x-1, y, x, y+1); + if(intensity != -1) + { + visit[x][y] = 1; + visit[x-1][y] = 1; + visit[x][y+1] = 1; + if(y == M - 1) + back(x+1, 0, sum + intensity); + else + back(x, y+1, sum + intensity); + visit[x][y] = 0; + visit[x-1][y] = 0; + visit[x][y+1] = 0; + } + + intensity = check(x,y, x+1, y, x, y-1); + if(intensity != -1) + { + visit[x][y] = 1; + visit[x+1][y] = 1; + visit[x][y-1] = 1; + if(y == M - 1) + back(x+1, 0, sum + intensity); + else + back(x, y+1, sum + intensity); + visit[x][y] = 0; + visit[x+1][y] = 0; + visit[x][y-1] = 0; + } + + intensity = check(x,y, x+1, y, x, y+1); + if(intensity != -1) + { + visit[x][y] = 1; + visit[x+1][y] = 1; + visit[x][y+1] = 1; + if(y == M - 1) + back(x+1, 0, sum + intensity); + else + back(x, y+1, sum + intensity); + visit[x][y] = 0; + visit[x+1][y] = 0; + visit[x][y+1] = 0; + } + + if(y == M - 1) + back(x+1, 0, sum); + else + back(x, y+1, sum); +} + +int main() +{ + cin >> N >> M; + for(int i=0;i<N;i++) + { + int num; + vector<int> temp(M); + visit.push_back(temp); + + for(int j=0;j<M;j++) + cin >> temp[j]; + input.push_back(temp); + } + + back(0,0,0); + + cout << ans; +}