Bootstrap

2024年最新【c++百日刷题计划】 —(3),大数据开发系统工程师面试题

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

N

N元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的

N

N

N元。于是,他把每件物品规定了一个重要度,分为

5

5

5等:用整数

1

5

1-5

1−5表示,第

5

5

5等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过

N

N

N元(可以等于

N

N

N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。

设第

j

j

j件物品的价格为

v

[

j

]

v[j]

v[j],重要度为

w

[

j

]

w[j]

w[j],共选中了

k

k

k件物品,编号依次为

j

1

,

j

2

,

,

j

k

j_1,j_2,…,j_k

j1​,j2​,…,jk​,则所求的总和为:

v

[

j

1

]

×

w

[

j

1

]

v

[

j

2

]

×

w

[

j

2

]

v

[

j

k

]

×

w

[

j

k

]

v[j_1] \times w[j_1]+v[j_2] \times w[j_2]+ …+v[j_k] \times w[j_k]

v[j1​]×w[j1​]+v[j2​]×w[j2​]+…+v[jk​]×w[jk​]。

请你帮助金明设计一个满足要求的购物单。

输入格式

第一行,为

2

2

2个正整数,用一个空格隔开:

n

,

m

n,m

n,m(其中

N

(

<

30000

)

N(<30000)

N(<30000)表示总钱数,

m

(

<

25

)

m(<25)

m(<25)为希望购买物品的个数。)

从第

2

2

2行到第

m

1

m+1

m+1行,第

j

j

j行给出了编号为

j

1

j-1

j−1的物品的基本数据,每行有

2

2

2个非负整数$ v p

(其中

(其中

(其中v

表示该物品的价格

表示该物品的价格

表示该物品的价格(v \le 10000)

,p$表示该物品的重要度(

1

5

1-5

1−5)

输出格式

1

1

1个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值

(

<

100000000

)

(<100000000)

(<100000000)。

样例 #1

样例输入 #1
1000 5
800 2
400 5
300 5
400 3
200 2

样例输出 #1
3900

解题思路

  • 1)简单的01背包问题,直接背板子。

参考代码

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

第三题 组合的输出

题目描述

排列与组合是常用的数学方法,其中组合就是从

n

n

n 个元素中抽出

r

r

r 个元素(不分顺序且

r

n

r \le n

r≤n),我们可以简单地将

n

n

n 个元素理解为自然数

1

,

2

,

,

n

1,2,\dots,n

1,2,…,n,从中任取

r

r

r 个数。

现要求你输出所有组合。

例如

n

=

5

,

r

=

3

n=5,r=3

n=5,r=3,所有组合为:

123

,

124

,

125

,

134

,

135

,

145

,

234

,

235

,

245

,

345

123,124,125,134,135,145,234,235,245,345

123,124,125,134,135,145,234,235,245,345。

输入格式

一行两个自然数

n

,

r

(

1

<

n

<

21

,

0

r

n

)

n,r(1<n<21,0 \le r \le n)

n,r(1<n<21,0≤r≤n)。

输出格式

所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。

**注意哦!输出时,每个数字需要

3

3

3 个场宽。以 C++ 为例,你可以使用下列代码:**

cout << setw(3) << x;

输出占

3

3

3 个场宽的数

x

x

x。注意你需要头文件 iomanip

样例 #1

样例输入 #1
5 3

样例输出 #1
  1  2  3
  1  2  4
  1  2  5
  1  3  4
  1  3  5
  1  4  5
  2  3  4


![img](https://img-blog.csdnimg.cn/img_convert/5297ff508a615a86742902f64955acff.png)
![img](https://img-blog.csdnimg.cn/img_convert/db1c4c3f7cc0a4ff1c191feaf7c0741f.png)
![img](https://img-blog.csdnimg.cn/img_convert/5e33d4a19df4d11a99c98bfb9b2093f2.png)

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

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

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


 
 1 
 
 
 < 
 
 
 n 
 
 
 < 
 
 
 21 
 
 
 , 
 
 
 0 
 
 
 ≤ 
 
 
 r 
 
 
 ≤ 
 
 
 n 
 
 
 ) 
 
 
 
 n,r(1<n<21,0 \le r \le n) 
 
 
 n,r(1<n<21,0≤r≤n)。


### 输出格式


所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。


**注意哦!输出时,每个数字需要  
 
 
 
 
 3 
 
 
 
 3 
 
 
 3 个场宽。以 C++ 为例,你可以使用下列代码:**



cout << setw(3) << x;


输出占  
 
 
 
 
 3 
 
 
 
 3 
 
 
 3 个场宽的数  
 
 
 
 
 x 
 
 
 
 x 
 
 
 x。注意你需要头文件 `iomanip`。


### 样例 #1


#### 样例输入 #1



5 3


#### 样例输出 #1



1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4

[外链图片转存中…(img-Q5B2s6xT-1714913060627)]
[外链图片转存中…(img-Dhu3y61I-1714913060627)]
[外链图片转存中…(img-JnMeiDCx-1714913060628)]

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

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

需要这份系统化资料的朋友,可以戳这里获取

;