您的位置:首页 > 其它

1027

2015-07-27 21:48 302 查看
#include<stdio.h>
#define DEBUG_IO (0)

const int MAX = 85;
const int INF = 65535;
bool isOver = false;
int N, M;
int answer;
int n[MAX];
int vis[MAX];
void dfs(int m, int step)
{
	if(m < 0 || (m > 0 && isOver == true && answer <= step))
	{
		return;
	}

	if(m == 0)
	{
		isOver = true;
		if(answer > step)
		{
			answer = step;
		}
	}

	if(vis[m] && vis[m] <= step)
		return;

	vis[m] = step;

	for(int i = 0; i < N; i++)
	{
		dfs(m - n[i], step + 1);
	}
}
int main()
{
#if DEBUG_IO 
    freopen("input.txt", "r", stdin); 
    setbuf(stdout, NULL); 
#endif
	int test_case = 0;
	scanf("%d", &test_case);

	while(test_case)
	{
		test_case--;

		int i;
		scanf("%d %d", &N, &M);

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

		for(i = 0; i < MAX; i++)
		{
			vis[i] = 0;
		}

		answer = INF;
		isOver = false;
		for(i = 0; i < N; i++)
		{
			dfs(M - n[i], 1);
		}

		if(isOver)
		{
			printf("%d\n", answer);
		}
		else
		{
			printf("0\n");
		}
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: