最全【c++百日刷题计划】 —(5),2024年最新2024网易C C++高级面试题及答案

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

n

n 个好友,给定失败时可获得的经验、胜利时可获得的经验,打败他至少需要的药量。

要求求出最大经验

s

s

s,输出

5

s

5s

5s。

输入格式

第一行两个数,

n

n

n 和

x

x

x。

后面

n

n

n 行每行三个数,分别表示失败时获得的经验

l

o

s

e

i

\mathit{lose}_i

losei​,胜利时获得的经验

w

i

n

i

\mathit{win}_i

wini​ 和打过要至少使用的药数量

u

s

e

i

\mathit{use}_i

usei​。

输出格式

一个整数,最多获得的经验的五倍。

样例 #1

样例输入 #1
6 8
21 52 1
21 70 5
21 48 2
14 38 3
14 36 1
14 36 2

样例输出 #1
1060

提示

【Hint】

五倍经验活动的时候,absi2011 总是吃体力药水而不是这种属性药。

【数据范围】

  • 对于

10

%

10%

10% 的数据,保证

x

=

0

x=0

x=0。

  • 对于

30

%

30%

30% 的数据,保证

0

n

10

0\le n\le 10

0≤n≤10,

0

x

20

0\le x\le 20

0≤x≤20。

  • 对于

60

%

60%

60% 的数据,保证

0

n

,

x

100

0\le n,x\le 100

0≤n,x≤100,

10

<

l

o

s

e

i

,

w

i

n

i

100

10<lose_i,win_i\le 100

10<losei​,wini​≤100,

0

u

s

e

i

5

0\le use_i\le 5

0≤usei​≤5。

  • 对于

100

%

100%

100% 的数据,保证

0

n

,

x

1

0

3

0\le n,x\le 10^3

0≤n,x≤103,

0

<

l

o

s

e

i

w

i

n

i

1

0

6

0<lose_i\le win_i\le 10^6

0<losei​≤wini​≤106,

0

u

s

e

i

1

0

3

0\le use_i\le 10^3

0≤usei​≤103。

解题思路

  • 1)变形的01背包问题。
  • 2)分两种情况,第一种是能打过,可以选择打或不打,第二种是打不过。

参考代码

#include<bits/stdc++.h>
using namespace std;
long long dp[105000];
int main()
{
	int n,x;
	cin>>n>>x;
	for(int i=1;i<=n;i++)
	{
		int lose,win,use;
		cin>>lose>>win>>use;
		for(int j=x;j>=use;j--)
		{
			dp[j]=max(dp[j]+lose,dp[j-use]+win);
		}
		for(int j=use-1;j>=0;j--)
		{
			dp[j]+=lose;
		}
	}
	cout<<dp[x]\*5;
    return 0;
}

第三题 最大约数和

题目描述

选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。

输入格式

输入一个正整数S。

输出格式

输出最大的约数之和。

样例 #1

样例输入 #1
11

样例输出 #1
9

提示

样例说明

取数字4和6,可以得到最大值(1+2)+(1+2+3)=9。

数据规模

S<=1000

解题思路

  • 1)看起来像数学题,其实还是背包问题。
  • 2)先进行预处理,求每个数最大公约数的和。
  • 3)01背包解决问题。

参考代码

#include<bits/stdc++.h>
using namespace std;
int i,j,n,a[1001],dp[1001];
int main()
{	cin>>n;
	for(i=1;i<=n/2;i++)
		for(j=2;i\*j<=n;j++)
			a[i\*j]+=i;
	for(i=1;i<=n;i++)
		for(j=i;j<=n;j++)
			dp[j]=max(dp[j],dp[j-i]+a[i]);
	cout<<dp[n];
  	return 0;
}

第四题 【深基16.例3】二叉树深度

题目描述

有一个

n

(

n

1

0

6

)

n(n \le 10^6)

n(n≤106) 个结点的二叉树。给出每个结点的两个子结点编号(均不超过

n

n

n),建立一棵二叉树(根节点的编号为

1

1

1),如果是叶子结点,则输入 0 0

建好树这棵二叉树之后,请求出它的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。

输入格式

第一行一个整数

n

n

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

j<=n;j++)
dp[j]=max(dp[j],dp[j-i]+a[i]);
cout<<dp[n];
return 0;
}


## 第四题 【深基16.例3】二叉树深度


### 题目描述


有一个  
 
 
 
 
 n 
 
 
 ( 
 
 
 n 
 
 
 ≤ 
 
 
 1 
 
 
 
 0 
 
 
 6 
 
 
 
 ) 
 
 
 
 n(n \le 10^6) 
 
 
 n(n≤106) 个结点的二叉树。给出每个结点的两个子结点编号(均不超过  
 
 
 
 
 n 
 
 
 
 n 
 
 
 n),建立一棵二叉树(根节点的编号为  
 
 
 
 
 1 
 
 
 
 1 
 
 
 1),如果是叶子结点,则输入 `0 0`。


建好树这棵二叉树之后,请求出它的深度。二叉树的**深度**是指从根节点到叶子结点时,最多经过了几层。


### 输入格式


第一行一个整数  
 
 
 
 
 n 
 
 
 
 n 


[外链图片转存中...(img-gIqmathZ-1715821375169)]
[外链图片转存中...(img-5sd5Lz0K-1715821375169)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618668825)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值