Skip to main content

Posts

Showing posts from May, 2019

XOR with Subset-XORSUB

Problem Link #include <iostream> using namespace std; int main() { int t, n, k; int arr[1001]; bool dp[1001][1024]; cin >> t; while(t--) { cin >> n >> k; for(int i = 0; i < n; i++) { cin >> arr[i]; } for(int i = 0; i <= n; i++) { for(int j = 0; j <= 1023; j++) { dp[i][j] = false; if(j == 0) { dp[i][j] = true; } else if(i > 0) { dp[i][j] = dp[i - 1][j] || dp[i - 1][j ^ arr[i - 1]]; } } } int maxVal = k; for(int i = 0; i <= 1023; i++) { if(dp[n][i]) { maxVal = max(maxVal, k ^ i); } } cout << maxVal << endl; } return 0; }

Pizza Delivery- DBOY

Problem Link #include <iostream> #include <climits> using namespace std; int h[501], k[501]; const int maxVal  = 99999; int main() { int t, n; cin >> t; while(t--) { cin >> n; int dp[1001][n + 1]; for(int i = 0; i < n; i++) { cin >> h[i]; h[i] = 2 * h[i]; } for(int i = 0; i < n; i++) { cin >> k[i]; } for(int i = 0; i <= 1000; i++) { for(int j = 0; j <= n; j++) { if(i == 0) { dp[i][j] = 0; continue; } else if(j == 0) { dp[i][j] = maxVal; } else { if(k[j - 1] > i) { dp[i][j] = dp[i][j - 1]; } else dp[i][j] = min(dp[i][j - 1], dp[i - k[j - 1]][j] + 1); } } } long minVal = 0; for(int i = 0; i < n; i++) { minVal += dp[h[i]][n]; } cout << minVal << endl; } return 0; }

Dessert Wizard- DELISH

Problem Link #include <iostream> #include<cmath> #define max(a,b) (a>b ? a : b) #define min(a,b) (a<b ? a : b) using namespace std; long long int leftdp[1000004][2],rightdp[1000004][2], dish[1000004]; int main() { int t, n; cin >> t; while(t--) { cin >> n; for(int i = 0; i < n; i++) { cin >> dish[i]; } leftdp[0][0] = dish[0]; leftdp[0][1] = dish[0]; for(int i = 1; i < n; i++) { leftdp[i][0] = max(leftdp[i - 1][0], 0) + dish[i]; leftdp[i][1] = min(leftdp[i - 1][1], 0) + dish[i]; } rightdp[n - 1][0] = dish[n - 1]; rightdp[n - 1][1] = dish[n - 1]; for(int i = n - 2; i >= 0; i--) { rightdp[i][0] = max(rightdp[i + 1][0], 0) + dish[i]; rightdp[i][1] = min(rightdp[i + 1][1], 0) + dish[i]; } long long int ans = 0; for(int i = 0; i < n-1; i++) {     ans = max(ans,abs(leftdp[i][0] - rightdp[i+1][1]));     ans = max(ans,abs(leftdp[i][1] - rightdp[