LQ0256 5个砝码DFS

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0256 5个砝码DFS相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2011初赛

题目描述
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。

如果只有 5 个砝码,重量分别是 1,3,9,27,81。则它们可以组合称出 1 到 121 之间任意整数重量(砝码允许放在左右两个盘中)。

本题目要求编程实现:对用户给定的重量,给出砝码组合方案。

输入描述
输入一个数字 N (1≤N≤121),表示给定的重量。

输出描述
输出一行,为砝码组合方案,要求程序输出的组合总是大数在前小数在后。

输入输出样例
示例
输入

5

输出

9-3-1

问题分析
用DFS来实现枚举搜索。

AC的C++语言程序如下:

/* LQ0256 5个砝码 */

#include <iostream>

using namespace std;

int n, weight[] = 81, 27, 9, 3, 1;

void dfs(int k, int sum, string ans)

    if(sum == n)
        cout << ans.substr(1) << endl;
    else if (k < 5) 
        dfs(k + 1, sum + weight[k], ans + "+" + to_string(weight[k]));
        dfs(k + 1, sum, ans);
        dfs(k + 1, sum - weight[k], ans + "-" + to_string(weight[k]));
    


int main()

    cin >> n;
    dfs(0, 0, "");
    
    return 0;

以上是关于LQ0256 5个砝码DFS的主要内容,如果未能解决你的问题,请参考以下文章

LQ0033 砝码称重DP

LQ0086 最少砝码迭代

洛谷 1441 砝码秤重

华为机试HJ41:称砝码(深度优先遍历dfs-Depth First Search)

P1441 砝码称重

设计一套砝码要求能称量出1 ~ 100g之间的任意重量,请问至少需要多少个砝码?以及每个砝码各自的重量是多少?