欧拉工程第18题 出从三角形顶端走到底端的最大和
来源:互联网 发布:北上战舰世界数据 编辑:程序博客网 时间:2024/05/22 12:22
题目
从下面的三角形的顶端开始,向下面一行的相邻数字移动,从顶端到底端的最大总和为23.
也就是 3 + 7 + 4 + 9 = 23.
找出从以下三角形的顶端走到底端的最大总和:
提示:以上图中共有16384条路径,所以你可以用穷举法。但是第67题是同样的题目,但是拥有100层。此时你不能再靠蛮力,你需要一个更便捷的方法。
上面贴图可能失效或者观看效果不好,你可以直接点击查看中文原题,或者点击查看英文原题。
解题方法
这题我的解法是将上一行的数据叠加到下一行,直至最后一行。以题目中的例子进行讲解。将第一行的3和第二行的7和4分别相加,得到10和7,替换原来的7和4。第二行就变成了10,7。再用新的第二行和第三行相加,结果替换第三行,需要注意的是,第三行的4可以和上一行的两个数相加,这里我们取和的较大值。最终我们获得的第三行是12,14,13。同理用新的第三行和第四行相加,获得新的第四行,是20,19,23,16
取新的第四行的最大值,即23。
如果要求最大的路径,我们可以在每次叠加时保留路径信息。
程序
程序中注意个问题,上图为了对称,小于10的数也被写成两位如08,09。但是编程语言中一般以0开头的数表示八进制数,所以08是不合法的,要去掉前面的0。
public static void solve() { int[][] num = { {75}, {95,64}, {17,47,82}, {18,35,87,10}, {20,04,82,47,65}, {19,01,23,75,03,34}, {88,02,77,73,07,63,67}, {99,65,04,28,06,16,70,92}, {41,41,26,56,83,40,80,70,33}, {41,48,72,33,47,32,37,16,94,29}, {53,71,44,65,25,43,91,52,97,51,14}, {70,11,33,28,77,73,17,78,39,68,17,57}, {91,71,52,38,17,14,91,43,58,50,27,29,48}, {63,66,04,68,89,53,67,30,73,16,69,87,40,31}, {04,62,98,27,23,9,70,98,73,93,38,53,60,04,23} }; // 上一行合并的结果 int[] lastSum = new int[15]; // 下一行合并的结果 int[] nextSum = new int[15]; lastSum[0] = num[0][0]; for (int i = 1; i < num.length; i++) { nextSum[0] = lastSum[0] + num[i][0]; for (int j = 1; j < i; j++) { nextSum[j] = (lastSum[j - 1] > lastSum[j] ? lastSum[j - 1] : lastSum[j]) + num[i][j]; } nextSum[i] = lastSum[i - 1] + num[i][i]; lastSum = Arrays.copyOf(nextSum, num.length); // 调试代码,你可以在这里看到合并后新的行输出 for (int n : lastSum) { if (n != 0) System.out.print(n + " "); } System.out.print("\n"); } int max = 0; for (int n : lastSum) { if (n > max) { max = n; } } System.out.println(max);}
0 0
- 欧拉工程第18题 出从三角形顶端走到底端的最大和
- Java进阶之欧拉工程 第十八篇【 找出从三角形顶端走到底端的最大和】
- 找出从三角形顶端走到底端的最大和。
- Project Euler 18.给你一组由数字组成的三角形,从三角形的顶端开始,依次移向下一行相邻数字,求从顶端到低端的最大和为多少?
- 欧拉工程第3题 找出一个合数的最大质数因子
- 欧拉工程第4题 找出由两个三位数乘积构成的最大回文数
- 欧拉工程第18题
- 如何从网页代码中看出一个元素到浏览器顶端的距离?
- 欧拉工程第23题 算出所有不能写成两个过剩数之和的正整数之和
- android listview 消除滑动到底端或者顶端时的黑色阴影
- 欧拉工程第10题 计算两百万以下所有质数的和
- 欧拉工程第15题 从20*20的网格的左上角通往右下角有多少条路
- 欧拉工程第17题 用英文写出1到1000的所有数字需要多少个字母
- 欧拉工程第11题
- 欧拉工程第12题
- 欧拉工程第13题
- 欧拉工程第14题
- 欧拉工程第15题
- mybatis中之后台调出sql语句
- 静态库制作和分析
- memcache add,set,replace区别
- 加密方式之BASE64
- C# 调用打印机打印图片
- 欧拉工程第18题 出从三角形顶端走到底端的最大和
- *[Lintcode]Longest Consecutive Sequence最长连续序列
- 清华EMBA课程系列思考之十三(2) -- 管理心理学
- poj3268(最短路,dijkstra)
- 2016-10-18课后练习
- 泛型
- Hadoop-从mapper中输出不同值的类型的数据
- 解题报告-PAT-Complete Binary Search Tree
- Linux Kernel数据结构:链表