只需要一个小小的处理即可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;
}