1068. Find More Coins (30)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int num[10010], arr[10010], n, m, flag;
vector<int> path;

void printpath()
{
	int size = path.size(), i;
	for(i = 0; i < size; i++)
	{
		if(i > 0)
		{
			printf(" ");
		}

		printf("%d", num[path[i]]);
	}

	printf("\n");
}

void dfs(int cur, int cursum)
{
	if(cursum == m)
	{
		flag = 1;
		printpath();

		return;
	}

	int i, nextsum;
	for(i = cur + 1; flag == 0 && i <= n; i++)
	{
		nextsum = cursum + num[i];
		if(nextsum > m || arr[n] - arr[i] + nextsum < m)
		{
			break;
		}

		path.push_back(i);
		dfs(i, nextsum);
		path.pop_back();
	}
}

int main()
{
	scanf("%d%d", &n, &m);

	int i, sum = 0;
	for(i = 1; i <= n; i++)
	{
		scanf("%d", &num[i]);
		sum += num[i];
	}

	sort(num + 1, num + n + 1);

	for(i = 1; i <= n; i++)
	{
		arr[i] = arr[i - 1] + num[i];
	}

	for(i = 1; i <= n && flag == 0; i++)
	{
		path.push_back(i);
		dfs(i, num[i]);
		path.pop_back();
	}

	if(flag == 0)
	{
		printf("No Solution\n");
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:14  王景迁  阅读(2)  评论(0)    收藏  举报

导航