1027

来源:互联网 发布:遗传算法 交叉概率 编辑:程序博客网 时间:2024/05/17 03:42
#include<stdio.h>#define DEBUG_IO (0)const int MAX = 85;const int INF = 65535;bool isOver = false;int N, M;int answer;int n[MAX];int vis[MAX];void dfs(int m, int step){if(m < 0 || (m > 0 && isOver == true && answer <= step)){return;}if(m == 0){isOver = true;if(answer > step){answer = step;}}if(vis[m] && vis[m] <= step)return;vis[m] = step;for(int i = 0; i < N; i++){dfs(m - n[i], step + 1);}}int main(){#if DEBUG_IO     freopen("input.txt", "r", stdin);     setbuf(stdout, NULL); #endifint test_case = 0;scanf("%d", &test_case);while(test_case){test_case--;int i;scanf("%d %d", &N, &M);for(i = 0; i < N; i++){scanf("%d", &n[i]);}for(i = 0; i < MAX; i++){vis[i] = 0;}answer = INF;isOver = false;for(i = 0; i < N; i++){dfs(M - n[i], 1);}if(isOver){printf("%d\n", answer);}else{printf("0\n");}}return 0;}

0 0
原创粉丝点击