Skip to main content

Posts

Showing posts from June, 2019

BACKPACK - Dab of Backpack

Problem Link Ref Link #include <iostream> #include <vector> using namespace std; struct node {     int vol,profit, p; }; int main() {     int t, n, vmax;     long dp[32001][61];     node parent[62];     vector<node> child[62];     cin >> t;     while(t--)     {         cin >> vmax >> n;               for(int i = 0; i < 62; i++)         {             parent[i].vol = -1;             child[i].clear();         }         for(int i = 1; i <= n; i++)         {             node temp;             cin >> temp.vol >> temp.profit >> temp.p;             if(temp.p == 0)             {                 parent[i] = temp;             }             else             {                 child[temp.p].push_back(temp);             }         }           for(int i = 0; i <= vmax; i++)         {             for(int j = 0; j <= n; j++)             {                 if(i == 0 || j == 0)                

MPILOT - Pilots

Problem Link Reference Link #include <iostream> #include <cmath> using namespace std; long INF = 9999999; int main() {     int n, x, y;     int assistant[10000], captain[10000];     long dp[2][5001];     cin >> n;     for (int i = 0; i < n; ++i)     {         cin >> captain[i] >> assistant[i];     }     for (int i = 0; i < 2; ++i)     {         for (int j = 0; j <= n / 2; ++j)         {             dp[i][j] = INF;         }     }     dp[1][1] = assistant[0];     for (int i = 2; i <= n; ++i)     {         int m = min(i, n / 2);         int index = i % 2;         // if we have to make 0 extra assistant then last one has to be captain         //because last one is eldest and cannot be assistant         dp[index][0] = dp[1 - index][1] + captain[i - 1];         // if we have to make m more assistants then  last one has to be assistant         //because i = 5 and m = 5 then we cannot do dp[4][5].         dp[in

SQRBR - Square Brackets

Problem Link Reference #include <iostream> using namespace std; long long int dp[40][40]; int main() { int d, n, k, pos; cin >> d; char arr[40]; while(d) { cin >> n >> k; for(int i = 0; i < 2 * n; i++) { arr[i] = '?'; } arr[2 * n] = '\0'; for(int i = 0; i < k; i++) { cin >> pos; arr[pos - 1] = '['; } n = 2 * n; for(int i = 0; i <= n; i++) { for(int j = 0; j <= n; j++) { if(i == 0 && j == 0) { dp[i][j] = 1; } else if((i == 0 && j != 0)) { dp[i][j] = 0; } else { if(arr[i - 1] == '?') { dp[i][j] = dp[i - 1][j + 1] + dp[i - 1][j - 1]; } else { dp[i][j] = dp[i - 1][j - 1]; } } } } cout << dp[n][0] << endl; d--; } return 0; }

SQRBR - Square Brackets 0(n3) solution

Problem Link #include <iostream> using namespace std; long long int dp[40][40]; int findPermutation(char s[], int i, int j) { if(s[i] == '?' &&  s[j] == ']') return 1; if(s[j] == '?' && s[i] == '[') { return 1; } if((s[i] == '[' && s[j] == ']')) return 1; if(s[i] == '?' && s[j] == '?') return 1; return 0; } int main() { int d, n, k, pos; cin >> d; char arr[40]; while(d) { cin >> n >> k; for(int i = 0; i < 40; i++) { for(int j = 0; j < 40; j++) { dp[i][j] = 0; if(i > j){ dp[i][j] = 1; } } } for(int i = 0; i < 2 * n; i++) { arr[i] = '?'; } arr[2 * n] = '\0'; for(int i = 0; i < k; i++) { cin >> pos; arr[pos - 1] = '['; } n = 2 *

MCARDS - Card Sorting

Problem Link #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; struct Card { int color, value; }; int bsearch(vector<int> v, int low, int high, int value) { int result = -1; while(low <= high) { int mid = (low + high) / 2; if(v[mid] < value) { result = mid; low = mid + 1; } else { high = mid - 1; } } return result; } int findLis(vector<int> lis, int totalCards) { vector<int> v; v.push_back(lis[0]); for(int i = 1; i < totalCards; i++) { int index = bsearch(v, 0, v.size() - 1, lis[i]); if(index + 1 == v.size()) { v.push_back(lis[i]); } v[index + 1] = lis[i]; } return v.size(); } int main() { int c, n, totalCards, i, maxLength; vector<int> per; cin >> c >> n; totalCards = c * n; Card arr[totalCards]; vector<int> lis; for(i = 0; i < totalCards; i

MDOLLS - Nested Dolls

Problem Link #include<iostream> #include <vector> #include <algorithm> using namespace std; struct box { int w, h; }; bool customSort(box a, box b) { if(a.w == b.w) { return a.h < b.h; } return a.w > b.w; } vector<box> v; int bsearch(int w, int h, int low, int high) { int mid; int ans = 100000; while(low <= high) { mid = (low + high) / 2; int width = v[mid].w; int height = v[mid].h; if(height > h) { ans = mid; high = mid - 1; } else { low = mid + 1; } } return ans; } int main() { int t, m, w, h, n, i; cin >> t; while(t--) { cin >> m; box arr[m]; n = 1; v.clear(); for(i = 0; i < m; i++) { cin >> arr[i].w >> arr[i].h; } sort(arr, arr + m, customSort); i = 1; v.push_back(arr[0]); while(i < m) { int index = bsearch(arr[i].w, arr[i].h, 0, v.size() - 1); if(index <= m - 1)