[HDU-2616] DFS

只需要一個小小的處理即可AC

/*
 * hdu-2616
 * mike-w
 * 2012-9-30
 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXN 15
#define reset(x) memset(x, 0, sizeof(x))
#define INF 99999

int a[MAXN], m[MAXN];
int N, M;
int tag[MAXN];
int ans;

int search(int cnt, int remain)
{
	if(remain<=0)
		ans=ans<cnt?ans:cnt-1;
	else if(cnt<ans)
	{
		int i;
		for(i=0; i<N; i++)
			if(!tag[i])
			{
				tag[i]=1;
				if(remain<=m[i])
					search(cnt+1, remain-2*a[i]);
				else
					search(cnt+1, remain-a[i]);
				tag[i]=0;
			}
	}
	return 0;
}


int main(void)
{
	int i;
	while(scanf("%d%d", &N, &M)!=EOF)
	{
		reset(a);
		reset(m);
		reset(tag);
		ans=INF;

		for(i=0; i<N; i++)
			scanf("%d%d", a+i, m+i);
		search(1, M);
		printf("%d\n", ans==INF?-1:ans);
	}
	return 0;
}


發佈了204 篇原創文章 · 獲贊 4 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章