Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <string>
- #include <map>
- #include <set>
- #include <vector>
- #include <algorithm>
- #include <queue>
- #include <bitset>
- #include <stack>
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #include <ctime>
- #define sqr(a) ((a)*(a))
- #define odd(a) ((a)&1)
- #define foru(i,n) for (int i=0;i<(n);i++)
- #define ford(i,n) for (int i=(n)-1;i>=0;i--)
- #define forab(i,l,r) for (int i=(l);i<=(r);i++)
- #define forabd(i,r,l) for (int i=(r);i>=(l);i--)
- #define pb push_back
- #define F first
- #define S second
- #define all(x) x.begin(),x.end()
- #define sz(__X) (int)__X.size()
- #define pii pair<int,int>
- const double eps=1e-19;
- const double PI=acos(-1.0);
- const int INF=1000*1000*1000+7;
- const int MAXN = 100005;
- using namespace std;
- int n,m;
- int a[MAXN];
- int b[MAXN];
- vector<int> ans[15];
- vector<int> pr[10000];
- bool was[105];
- void rec(int x)
- {
- if ( x == m)
- {
- for (int i=0; i<m; i++)
- {
- printf("%d\n", sz(ans[i]));
- for (int j=0;j<sz(ans[i]); j++)
- printf("%d ", ans[i][j]);
- printf("\n");
- }
- exit(0);
- }
- int u = b[x];
- for (int j=0; j<sz(pr[u]); j++)
- {
- if ( !was[pr[u][j]] )
- {
- int v = pr[u][j];
- ans[x].push_back(a[v]);
- was[v]=true;
- b[x] -= a[v];
- if ( b[x] == 0)
- rec(x+1);
- else rec(x);
- b[x]+=a[v];
- ans[x].pop_back();
- was[v]=false;
- }
- }
- }
- int main()
- {
- //freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- scanf("%d %d", &n, &m);
- pr[0].push_back(-1);
- for (int i=0; i<n; i++)
- {
- scanf("%d", &a[i]);
- }
- srand(time(NULL));
- sort(a, a+n);
- for (int i=n; i>=0; i--)
- {
- for (int j=9900; j>=0; j--)
- {
- if ( !pr[j].empty() )
- pr[j+a[i]].push_back(i);
- }
- }
- for (int i=0; i<m; i++)
- scanf("%d", &b[i]);
- rec(0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment