题解 | #最小邮票数#

最小邮票数

https://www.nowcoder.com/practice/83800ae3292b4256b7349ded5f178dd1

#include <stdio.h>

int minStamps;

// target:还需要的目标数
void dfs(int target, int currentStamps, int index, int n, int* stamps) {
    if (target == 0) {
        // 达到目标值,更新最小邮票张数
        if (currentStamps < minStamps) {
            minStamps = currentStamps;
        }
        return;
    }

    if (index == n || target < 0) {
        // 遍历完所有邮票或者目标值小于0,回溯
        return;
    }

    // 选择当前邮票
    // 确保每次index+1
    dfs(target - stamps[index], currentStamps + 1, index + 1, n, stamps);

    // 不选择当前邮票,继续下一张邮票
    dfs(target, currentStamps, index + 1, n, stamps);
}

int main() {
    int total;// 目标总数
    while (scanf("%d", &total) != EOF) { 
        int count;// 邮票张数
        scanf("%d", &count);
        int stamps[count];
        for (int i = 0; i < count; i++)
        {
            scanf("%d", &stamps[i]);
        }
        minStamps = 20;
        dfs(total,0,0,count,stamps);
        if(minStamps == 20){
            printf("%d",0);
        }else{
            printf("%d",minStamps);
        }
    }
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务