624

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <stack>
#include <cstdio>

#define INF 100000000

using namespace std;

int arr[25];
int res[25];
int SZ;
vector<int> vb;
bool visit[25];
int ind;
int MN;

void backtrack(int remaining,int index)
{

	if(remaining<MN)
	{
		MN = remaining;
		SZ = vb.size();
		for(int i=0;i<SZ;i++)
		{
			res[i] = vb[i];
		}
	}

	for(int i=index+1;i<ind;i++)
	{
		if(visit[i]==0)
		{
			if(remaining - arr[i]<0)
			{
				continue;
			}
			vb.push_back(arr[i]);
			visit[i] = true;
			remaining = remaining - arr[i];
			backtrack(remaining,i);
			visit[i] = false;
			vb.pop_back();
			remaining = remaining + arr[i];
		}

	}

}

int main()
{
	int n,remaining;
	stringstream ss;
	string s;
	for(int i=0;i<25;i++)
		visit[i] = false;

	while(scanf("%d",&arr[0])!=EOF)
	{
		cin>>arr[1];//
		ind=2;//
		for(int i=0;i<arr[1];i++)//
			cin>>arr[ind++];

		remaining = arr[0];
		MN = INF;
		for(int i=2;i<ind;i++)
		{
			if(visit[i]==0)
			{
				if(remaining - arr[i]<0)
				{
					continue;
				}
				visit[i] = true;
				vb.push_back(arr[i]);
				remaining = remaining - arr[i];
				backtrack(remaining,i);
				visit[i] = false;
				remaining = remaining + arr[i];
				vb.pop_back();
			}

		}

		for(int i=0;i<SZ;i++)
			cout<<res[i]<<" ";
		cout<<"sum:"<<arr[0] - MN<<"\n";
	}

	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *