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的主要内容,如果未能解决你的问题,请参考以下文章