UVA 529 - Addition Chains

news/2024/11/7 1:34:19/

题目大意:给一个数字n, 然后输出一个元素个数最少的从1到n的序列(可能有多种方案,输出其中一种即可)。

其中对于第k个数Ak, 它的值等于Ai+Aj$0 \le i, j \le k-1$)


解题思路:迭代深搜的方法,先确定数的基数,就是说组成这个数最少需要几个数,例如1个数最大组成1, 2个数最大组成2, 而3个数最大为4(每增加一个数,最大值 * 2)

一个很重要的剪枝,当当前第i个数,为k, k的在剩余的位数中以倍数形式增长后仍小于目标值就剪掉

#include <cstdio>int arr[20] = {1}, step, n;bool DFS(int count) {if (arr[count] == n)return true;for (int i = 0; i <= count; i++) {if (count + 1 > step || arr[count] << step - count < n || arr[count] + arr[i] > n)return false;arr[count + 1] = arr[count] + arr[i];if (DFS(count + 1))return true;}return false;
}	int main() {while (scanf("%d", &n), n) {for (step = 0; 1 << step < n || !DFS(0); step++);for (int i = 0; i <= step; i++)printf(i == step ? "%d\n" : "%d ", arr[i]);}return 0;
}



http://www.ppmy.cn/news/884496.html

相关文章

nyoj-529-flip

#include<stdio.h> int main() { int s,n,m; scanf("%d",&s); while(s--) { int sum0; scanf("%d",&n); mn1; while(m) { if((n&1)!(m&1)) sum; n>>1; m>>1; } printf("%d\n",sum); } return 0; }

uva 529 Addition Chains

题目地址&#xff1a; http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem470 题目描述&#xff1a; Addition Chains An addition chain for n is an integer sequence with the following four properties: a0…

leetcode 529. Minesweeper 扫雷游戏 + 经典的DFS深度优先遍历

Let’s play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representing the game board. ‘M’ represents an unrevealed mine, ‘E’ represents an unrevealed empty square, ‘B’ represents a revealed blank square that has no a…

ZTE Q529C root成功方法

ZTE Q529C root成功方法 本人是Android开发工程师&#xff0c;由于公司买了一个中兴ZTE Q529C的手机&#xff0c;一直找相应的root教程。但是网上几乎没有相应的说明&#xff0c;有的方法也是不可行的。今天早上进行再次root&#xff0c;结果成功了。 root的结果如下 Root工具…

529. 扫雷游戏 DFS

529. 扫雷游戏 2020/8/20每日一题打卡√ 题目描述 解题思路 感觉这个题最难的点还是在于理解题意和样例 理解了之后就很明确了&#xff0c;就是正常的DFS 如果点击了雷&#xff0c;就爆炸 如果没点到雷&#xff0c;就判断这个位置旁边有没有雷&#xff1b;如果有雷&#xff…

uva 529 - Addition Chains

此题使用迭代加深搜索。。 注意:1.首先确定最少的步数 2.剪枝:获得当前数t之后。。。看 t * 2(的maxd -d次方)能不能大于n&#xff0c;反之则不用再dfs下去了。 // // main.cpp // uva 529 - Addition Chains // // Created by XD on 15/8/8. // Copyright (c) 2015年…

【ID搜索】uva529Addition Chains

题目描述&#xff1a;对于一个数列{a}&#xff0c;任意一个数都比前面的数大&#xff0c;且是前面任意两个数&#xff08;可以是同一个数&#xff09;之和。a01。求得到n的最短数列&#xff08;最优解不为一&#xff09;。 样例&#xff1a; 输入 5 7 12 15 77 0 输出…

java 中\u767b\u5f55\u6210\u529f编码转成明文

new String("\u767b\u5f55\u6210\u529f".getBytes(),"utf-8") 如果不是utf-8&#xff0c;则可以替换成 unicode