Advertisement
Guest User

Untitled

a guest
Mar 12th, 2012
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <stdio.h>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <memory.h>
  7. #include <string>
  8. #include <algorithm>
  9. #include <vector>
  10. #include <queue>
  11. #include <map>
  12. #include <set>
  13.  
  14. using namespace std;
  15.  
  16. #define ll long long
  17.  
  18. FILE *fin = freopen("skyscraper.in", "r", stdin);
  19. FILE *fout = freopen("skyscraper.out", "w", stdout);
  20.  
  21. vector<int> memo[1 << 18];
  22. pair<ll, int> masks[1 << 18];
  23. ll c[18];
  24. int n;
  25. ll w;
  26.  
  27. void get(int mask)
  28. {
  29.     ll total = 0;
  30.     for (int i = 0; i < n; i++)
  31.         if (mask & (1 << i))
  32.         {
  33.             memo[mask].push_back(i);
  34.             total += c[i];
  35.         }
  36.     masks[mask] = make_pair(total, mask);
  37. }
  38.  
  39. int main()
  40. {
  41.     scanf("%d%lld", &n, &w);
  42.     for (int i = 0; i < n; i++)
  43.         scanf("%lld", c+i);
  44.     for (int mask = 0; mask < (1 << n); mask++)
  45.         get(mask);
  46.     sort(masks + 1, masks + (1 << n));
  47.     reverse(masks + 1, masks + (1 << n));
  48.     int mask = 0;
  49.     vector<int> ans;
  50.     for (int i = 1; i < (1 << n); i++)
  51.     {
  52.         if (!(masks[i].second & mask) && masks[i].first <= w)
  53.         {
  54.             ans.push_back(masks[i].second);
  55.             mask |= masks[i].second;
  56.         }
  57.     }
  58.     printf("%d\n", ans.size());
  59.     for (int i = 0; i < ans.size(); i++)
  60.     {
  61.         printf("%d", memo[ans[i]].size());
  62.         for (int j = 0; j < memo[ans[i]].size(); j++)
  63.             printf(" %d", memo[ans[i]][j]+1);
  64.         puts("");
  65.     }
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement