题目:
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。你需要多久才能采到总价值至少为m的药?
输入
输入的第一行有两个整数m(1 < = m < = 1000)和n(1 < = n < = 100),用一个空格隔开,m代表需要的价值,n代表山洞里的草药的数目。
接下来的n行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出
输出完成任务的最少时间。
我的代码:
#include <bits/stdc++.h>
int n, m, i, j, k, ans, u[105], a[105], b[105];
void dfs(int k){
if(k > n){
int i, s=0, t=0;//总价值 s、总时间 t
for(i=1; i<=n; i++){
if(u[i]) t += a[i], s += b[i];
}//采了的药材累加价值和时间
if(s >= m && t <= ans) ans = t;
}
else{
u[k] = 1;//采这株药,填 1
dfs(k+1);
u[k] = 0;//不采这株药,填 0
dfs(k+1);
}
}
int main(){
scanf("%d %d", &m, &n);
for(i=1; i<=n; i++){
scanf("%d %d", &a[i], &b[i]);
}
dfs(1);
printf("%d\n", ans);
return 0;
}
求教为什么输出0,谢谢巨佬们