洛谷P1216 2022.5.22 13:29

news/2024/11/17 23:39:25/

C:(100分)

我理解的大概原理:

题目:“从最高点到底部任意处结束的路径,使路径经过数字的和最大”

也就是找下面其中的一条路线,然后把这条路线上的所有数加起来,找到和数最大的那条路线

然后当时我的第一想法是列出所有的路线,然后得出每条路线的和,比如:

7(塔顶)- 3 - 8 - 2 - 4 和为 24

7(塔顶)- 3 - 8 - 2 - 5 和为 25

............................

之后了解到了下面要说的算法,感觉简单了很多很多

这个算法的基本原理有两点:

1. 逆向思维,从塔顶开始弄

2. 比较 一个数A 与相连的两个数中哪个数最大,把这个最大的数加到A上

(我们可以从这金字塔看出,除去塔顶和塔底的数外,每个数对上面有一个数相连,对下面有两个数相连

以该图左下部分为例:

除去塔底的4 和 5

以2为例

2对上面只有一个数相连,为8

2对下面有两个数相连,为4 和 5

做一个判断,在4 和 5中选择最大的那个加到2上面,2变成7

右边也与左边一样

待塔底的所有数都比较完也选择相应最大的加到 塔底第二行上,第二行也重复上述步骤

最终汇聚到塔顶

最后只需要输出塔顶的数,就可以得到 “单独的一行,得到的最大的和”

(大概是这个样,可能说的不是很清楚,建议自己上机看监视过一遍)

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#define biao_Max 1001int biao[biao_Max][biao_Max] = { 0 };  //创建一个二维数组来储存 数字金字塔int whoismax(int x, int y)
{return x > y ? x : y;
}int main()
{int r = 0;  //正整数 r ,表示行的数目scanf("%d", &r);//把数字金字塔导入二维数组内for (int i = 0; i < r; i++){for (int j = 0; j <= i; j++){scanf("%d", &biao[i][j]);}}//算法主体for (int i = r - 2; i >= 0; i--){for (int j = 0; j <= i; j++){biao[i][j] += whoismax(biao[i + 1][j], biao[i + 1][j + 1]);}}printf("%d", biao[0][0]);return 0;
}

C++:(100分)

C++的话就是把自制的max函数换成了头文件自带的,然后修改了输入和输出,没什么大变化

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <algorithm>using namespace std;#define biao_Max 1001int biao[biao_Max][biao_Max] = { 0 };  //创建一个二维数组来储存 数字金字塔int main()
{int r = 0;  //正整数 r ,表示行的数目cin >> r;//把数字金字塔导入二维数组内for (int i = 0; i < r; i++){for (int j = 0; j <= i; j++){cin >> biao[i][j];}}//算法主体for (int i = r - 2; i >= 0; i--){for (int j = 0; j <= i; j++){biao[i][j] += max(biao[i + 1][j], biao[i + 1][j + 1]);}}cout << biao[0][0];return 0;
}

python:(100分)

python版的C语言,python中没有二维数组,就改用列表了

r = eval(input())list1 = []for i in range(r):list1.append(list(map(int, input().split(" "))))for i in reversed(range(r - 1)):for j in range(i + 1):list1[i][j] += max(list1[i + 1][j], list1[i + 1][j + 1])print(list1[0][0])


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

相关文章

hpm1216nfh驱动程序_惠普M1216nfh驱动下载

惠普M1216nfh打印机是一款集打印、复印、扫描、传真为一体的多功能商用打印机&#xff0c;支持有线网络打印&#xff0c;分辨率高&#xff0c;可以满足很多大型企业的需求。今天小编带来了此款打印机的驱动程序&#xff0c;安装之后就可以实现打印机的正常工作了&#xff0c;欢…

java打jar包并包装成exe解压即用

1首先找到要加载的main方法类 public static void main(String[] args) { //创建该对象则调用构造方法&#xff0c;对象实现ActionListener则自动调用actionPerformed&#xff08;&#xff09;方法new PicdealMain();}2.点击 idea&#xff1a;File->Project Struce…(快捷键…

QC协议+华为FCP+三星AFC快充取电5V9V芯片FS2601应用

1、概述 FS2601是一款符合USB QC2.0、QC3.0、华为FCP和三星AFC快充协议的受电端&#xff08;诱骗取电&#xff09;协议芯片&#xff0c;让适配器输出合适的电压给产品供电&#xff0c;可广泛应用于各个领域的各种产品&#xff0c;如无线充电、小家电、老化器、智能机器人等。 …

手机充电器怎么选?PD20W快充充电器,安全靠谱回血快!

还记得iPhone12系列发布之初&#xff0c;苹果宣布为了低碳环保&#xff0c;取消随机附赠的充电器。随后&#xff0c;小米、魅族、三星等品牌也陆续跟进了这一策略。近日&#xff0c;有消息表明&#xff0c;还未发布的华为Mate 40 Pro&#xff0c;也会取消掉原本标配的充电器。由…

识别各种手机QC2.0快充IC-AH8688

识别各种手机QC2.0快充IC-AH8688是一款单芯片USB充电器&#xff0c;高通公司QC2.0接口和USB充电端口控制器&#xff0c;它可以自动检测苹果电脑公司的设备&#xff0c;三星Galaxy Tab设备和一般BC1.2及YD / T 1591年至2009年的设备。识别各种手机QC2.0快充IC-AH8688集成了一个高…

苹果android通用插头,苹果充电器插头可以给安卓手机用吗??

而且无论是苹果手机还是安卓2113手机&#xff0c;标配5261的充电器一段都是通用的USB接口&#xff0c;两4102种充电器混用也不会有什么1653问题。快充技术兴起之后&#xff0c;很多智能手机为了达到快速充电的效果&#xff0c;都加强了电压或者电流。但是正规的手机充电器都是根…

手机无线充标准

5W标准 最早以lumia系列手机为市场主导&#xff0c;其次以三星&#xff0c;LG等品牌为跟随升级发展&#xff0c;到现在市场上有很多很多手机都支持5W无线充电。5W无线充电一般都是Qi-BPP&#xff08;Baseline Power Profile&#xff09;标准的&#xff0c;所以只要无线充电器上…

手机快充芯片及其技术标准和设计原理详解

手机快充芯片及其技术标准和设计原理详解 智能手机对于宽带无线通信、图像处理等多方面的需求导致实际耗电呈指数增长。未来5G通信带宽将比4G增加10倍&#xff0c;4K/8K等高清视频技术逐渐应用&#xff0c;CPU、GPU等运算电路处理能力不断增强&#xff0c;这一切都将导致智能手…