- 岳麓山上打水
- 2017-09-24 21:08:46 @
#include <map>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <bitset>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define INF (0x3f3f3f3f)
#define LINF (0x3f3f3f3f3f3f3f3fLL)
using namespace std;
const int Qsize=20005;
const int Psize=105;
int Q,P,Fg;
int W[Psize],C[Psize],F[Qsize],G[Qsize];
void DFS (int f,int t) {
if (F[Q]) Fg=1;
if (Fg||f>t) return;
for(int i=1;i<=P&&!Fg;i++)
if (!C[i]) {
C[i]=1;
for(int j=0;j<=Q;j++) G[j]=F[j];
for(int j=W[i];j<=Q;j++)
if (F[j-W[i]]) F[j]=1;
DFS(f+1,t);
if (!Fg) C[i]=0;
for(int j=0;j<=Q;j++) F[j]=G[j];
}
}
int main () {
cin>>Q>>P;
for(int i=1;i<=P;i++) cin>>W[i];
sort(W+1,W+P+1);
F[0]=1;
int t;
for(t=1;t<=P&&!Fg;t++) DFS(1,t);
cout<<t-1<<" ";
for(int i=1;i<=P;i++)
if (C[i]) cout<<W[i]<<" ";
return 0;
}
0 条评论
目前还没有评论...