采药变式求助
  • 板块题目总版
  • 楼主WilliamPan
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/8/2 20:27
  • 上次更新2023/11/6 21:28:56
查看原帖
采药变式求助
238907
WilliamPan楼主2020/8/2 20:27

题目:

辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。你需要多久才能采到总价值至少为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,谢谢巨佬们

2020/8/2 20:27
加载中...