3 100 10 20 45 89 5 40 3 100 10 20 45 90 5 40 3 100 10 20 45 84 5 40
3 2 -1
#include<stdio.h>
#include<string.h>
int n,a[11],b[11],c[11],min;
void dfs(int cur,int hp)
{
int i;
if(hp<=0)
if(cur<min)
min=cur;
if(cur>n)
;
for(i=0;i<n;i++)
{
if(!c[i])
{
if(hp>b[i])
{
c[i]=1;
dfs(cur+1,hp-a[i]);
c[i]=0;
}
else
{
c[i]=1;
dfs(cur+1,hp-2*a[i]);
c[i]=0;
}
}
}
}
int main()
{
int i,m;
while(~scanf("%d%d",&n,&m))
{
memset(c,0,sizeof(c));
for(i=0;i<n;i++)
scanf("%d%d",&a[i],&b[i]);
min=11;
dfs(0,m);
if(min!=11)
printf("%d\n",min);
else
printf("-1\n");
}
return 0;
}
原文:http://blog.csdn.net/fanerxiaoqinnian/article/details/23620567