// File Name: 1093.cpp
// Author: bo_jwolf
// Created Time: 2014年02月04日 星期二 16时13分43秒
#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;
const int maxn = 1005;
int board[ maxn ], length[ maxn ], vis[ maxn ], temp[ maxn ];
vector<int> ans[15];
int flag, m, n;
int cmp( int a, int b ){
return a > b;
}
void Dfs( int sum, int cur ){
if( sum == length[ cur ] ){
temp[ cur ] = ans[ cur ].size();
flag = 1;
return;
}
for( int i = 0; i < m; ++i ){
if( !vis[ i ] && sum + board[ i ] <= length[ cur ] ){
vis[ i ] = 1;
ans[ cur ].push_back( board[ i ] );
Dfs( sum + board[ i ], cur );
if( flag )
return;
vis[ i ] = 0;
ans[ cur ].pop_back();
}
}
}
int main(){
while( cin >> m >> n ){
if( !m && !n )
break;
for( int i = 0; i < m; ++i )
cin >> board[ i ];
for( int i = 0; i < n; ++i )
cin >> length[ i ];
sort( board, board + m, cmp );
memset( vis, 0, sizeof( vis ) );
for( int i = 0; i < n; ++i ){
flag = 0;
Dfs( 0, i );
}
for( int i = 0; i < n; ++i ){
cout << temp[ i ];
for( int j = 0; j < temp[ i ]; ++j ){
cout << " " << ans[ i ][ j ];
}
cout << endl;
}
for( int i = 0; i < n; ++i )
ans[ i ].clear();
}
return 0;
}
伊拉克
最新推荐文章于 2024-07-16 14:52:21 发布