Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int recursivesum(int currind, int end, int a[])
- {
- if (currind == end) return 0;
- int sum = a[currind] + recursivesum(currind + 1, end, a);
- return sum;
- }
- int recursivemax(int currind, int end, int a[])
- {
- if (currind == end) return -INT_MAX;
- int mx = max(a[currind], recursivemax(currind + 1, end, a));
- return mx;
- }
- int recursivemin(int currind, int end, int a[])
- {
- if (currind == end) return INT_MAX;
- int mn = min(a[currind], recursivemin(currind + 1, end, a));
- return mn;
- }
- void findsum(vector<int>& a, int l, int r, int &sum, int &count, int& ans, int x)
- {
- if (sum == x)
- {
- ans = min(ans, count);
- return ;
- }
- ////base case
- if (l > r) return;
- ///////taking the left most element
- sum += a[l]; count++;
- findsum(a, l + 1, r, sum, count, ans, x);
- //backtracking step
- sum -= a[l]; count--;
- ///////taking the righmost element
- sum += a[r]; count++;
- findsum(a, l, r - 1, sum, count, ans, x);
- sum -= a[r]; count--;
- return;
- }
- int main()
- {
- int n, x; cin >> n >> x;
- vector<int> a(n + 1);
- for (int i = 1; i <= n; i++) cin >> a[i];
- // int sum = recursivesum(1, n + 1, a);
- // cout << "Sum-> " << sum << endl;
- // int mx = recursivemax(1, n + 1, a);
- // cout << "Max-> " << mx << endl;
- // int mn = recursivemin(1, n + 1, a);
- // cout << "Min-> " << mn << endl;
- int sum = 0, count = 0, ans = INT_MAX;
- findsum(a, 1, n, sum, count, ans, x);
- if (ans == INT_MAX)
- {
- ///answer is not updated
- cout << "-1" << endl;
- }
- else cout << ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement