昨天的比赛题目,其实就是深搜,一个一个的枚举。。。。。 最多10个,就是9!次循环。不会超时!! #include<stdio.h>#include<limits.h>int A[11],M[11];int mark[11];int n;int cout=INT_MAX;void dfs(int ,int ,int);int main(){ int xue; int i; while(scanf("%d %d",&n,&xue)!=EOF) { cout=INT_MAX; for(i=1;i<=n;i++) { scanf("%d %d",&A[i],&M[i]); mark[i]=0; } for(i=1;i<=n;i++) { mark[i]=1; dfs(1,xue,i); mark[i]=0; } if(cout==INT_MAX) printf("-1\n"); else printf("%d\n",cout); } return 0;}void dfs(int c,int xx,int i)//数量,血,第几块{ int j; int temp=xx; if(c>cout) return ; if(xx<=M[i]) { xx=xx-2*A[i]; } else xx=xx-A[i]; if(xx<=0) cout=c; else { for(j=1;j<=n;j++) { if(mark[j]==0) { mark[j]=1; dfs(c+1,xx,j); mark[j]=0; } } }}

评论