题意:找到最小步骤杀死monster
连接:http://acm.hdu.edu.cn/showproblem.php?pid=2616
View Code
#include <iostream> using namespace std; int map[15][3]; int used[15]; int n; int sum,temp,type; int Min=100000000; void dfs(int k,int m) { if(k==n+1)//当到达第K层的时候就不在递归下去了 { if(m>0) { return; } } if(m<=0)//判断是否可以杀死monster,如果可以杀死就不在往下找了。直接返回找下一个 { type=1; if(Min>sum)//找最小的步数杀死monster { Min=sum; } return; } for(int i=1;i<=n;i++) { if(!used[i]) { int kk; used[i]=1; if(m<=map[i][2]) { kk=2*map[i][1]; } else kk=map[i][1]; sum++; m-=kk; dfs(k+1,m); used[i]=0; sum--; m+=kk; } } } int main() { int m; while(~scanf("%d%d",&n,&m)) { memset(map,0,sizeof(map)); memset(used,0,sizeof(used)); sum=0; type=0; Min=10000000; for(int i=1;i<=n;i++) { scanf("%d%d",&map[i][1],&map[i][2]); } dfs(1,m); if(!type)//判断是否可以杀死monster { printf("-1\n"); } else printf("%d\n",Min);//输出最小值 } return 0; }