Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <string>
- #include <string.h>
- #include <queue>
- #include <map>
- #include <set>
- #include <cmath>
- #include <sstream>
- #include <stack>
- #include <cassert>
- #define pb push_back
- #define mp make_pair
- #define PI 3.1415926535897932384626433832795
- #define sqr(x) (x)*(x)
- #define forn(i, n) for(int i = 0; i < n; ++i)
- #define ALL(x) x.begin(), x.end()
- #define F first
- #define S second
- #define m0(x) memset(x,0,sizeof(x))
- #define m1(x) memset(x,-1,sizeof(x))
- #define CC(x) cout << (x) << "\n"
- #define pw(x) (1ull<<(x))
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- typedef pair<int,int> pii;
- const int INF = 2147483647;
- const ll LLINF = 9223372036854775807LL;
- int n,m;
- int a[110];
- int p[110];
- int b[11];
- int val;
- void dfs(int k) {
- if (k==m) {
- vector<int> z[11];
- for (int i=0;i<n;i++) {
- if (p[i]==-1) continue;
- z[p[i]].pb(i);
- }
- for (int i=0;i<m;i++) {
- printf("%d\n", z[i].size());
- for (int j=0;j<z[i].size();j++) printf("%d ", a[z[i][j]]);
- printf("\n");
- }
- exit(0);
- }
- if (b[k]==0) {
- dfs(k+1);
- return;
- }
- for (int i=0;i<n;i++) {
- if (p[i]!=-1) continue;
- if (a[i]<=b[k]) {
- b[k]-=a[i];
- p[i]=k;
- dfs(k);
- p[i]=-1;
- b[k]+=a[i];
- }
- }
- }
- int main() {
- //freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- scanf("%d %d", &n, &m);
- m1(p);
- for (int i=0;i<n;i++) scanf("%d", &a[i]);
- sort(a, a+n);
- reverse(a, a+n);
- for (int i=0;i<m;i++) scanf("%d", &b[i]);
- dfs(0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment