Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include "optimization.h"
- using namespace std;
- int first[22];
- int first_sum[32770];
- int second[22];
- int second_sum[32770];
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- int n;
- cin >> n;
- for (int i = 0; i < (n / 2); i++) {
- cin >> first[i];
- }
- int size_first = n / 2;
- if (n % 2 != 0) {
- n++;
- }
- int size_second = n / 2;
- for (int i = 0; i < (n / 2); i++) {
- cin >> second[i];
- }
- for (int i = 0; i < (1 << size_first); i++) {
- first_sum[i] = 0;
- }
- for (int i = 0; i < (1 << size_second); i++) {
- second_sum[i] = 0;
- }
- for (int A = 0; A < (1 << size_first); A++) {
- for (int i = 0; i < size_first; i++) {
- if ((A >> i) & 1) {
- first_sum[A] += first[i];
- }
- }
- }
- for (int A = 0; A < (1 << size_first); A++) {
- // cout << first_sum[A] << ' ';
- }
- // cout << endl;
- for (int B = 0; B < (1 << size_second); B++) {
- for (int i = 0; i < size_second; i++) {
- if ((B >> i) & 1) {
- second_sum[B] += second[i];
- }
- }
- }
- for (int B = 0; B < (1 << size_second); B++) {
- // cout << second_sum[B] << ' ';
- }
- cout << endl;
- sort(second_sum, second_sum + size_second);
- sort(first_sum, first_sum + size_first);
- int c;
- long long ans = 0;
- cin >> c;
- int j = (1 << size_second) - 1;
- for (int i = 0; i < (1 << size_first); i++) {
- int k = upper_bound(second_sum,second_sum + size_second, c - first_sum[i]) - second_sum ;
- // cout << i <<' ' << k << endl;
- //if (k != size_second -2 || second_sum[size_second - 2] <= c-first_sum[i] ) {
- ans += k + 1;
- //}
- //cout <<"cycle: " << ans << endl;
- }
- cout << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement