C C++最新【c++百日刷题计划】 —(2),做了6年的C C++

img
img

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

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

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

for(int i=0; i<n; i++)
{
    cin>>a[i].id>>a[i].sc1>>a[i].sc2;
    a[i].score=a[i].sc1+a[i].sc2;
    a[i].final_score=a[i].sc1\*0.7+a[i].sc2\*0.3;
}
for(int i=0; i<n; i++)
{
    if(a[i].score>140&&a[i].final_score>=80) 
    {
        cout <<"Excellent"<<endl;
    }
    else 
    {
        cout<<"Not excellent"<<endl;
    }
}
return 0;

}


## 第二题 5 倍经验日


### 题目背景


现在乐斗有活动了!每打一个人可以获得 5 倍经验!absi2011 却无奈的看着那一些比他等级高的好友,想着能否把他们干掉。干掉能拿不少经验的。


### 题目描述


现在 absi2011 拿出了  
 
 
 
 
 x 
 
 
 
 x 
 
 
 x 个迷你装药物(嗑药打人可耻…),准备开始与那些人打了。


由于迷你装药物每个只能用一次,所以 absi2011 要谨慎的使用这些药。悲剧的是,用药量没达到最少打败该人所需的属性药药量,则打这个人必输。例如他用  
 
 
 
 
 2 
 
 
 
 2 
 
 
 2 个药去打别人,别人却表明  
 
 
 
 
 3 
 
 
 
 3 
 
 
 3 个药才能打过,那么相当于你输了并且这两个属性药浪费了。


现在有  
 
 
 
 
 n 
 
 
 
 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】二叉树深度



![img](https://img-blog.csdnimg.cn/img_convert/4737fc22545c63051dd227f2a097324e.png)
![img](https://img-blog.csdnimg.cn/img_convert/e38e1be9dfe75ed16b4464e17dc6bc16.png)

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

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

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




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】二叉树深度



[外链图片转存中...(img-oXRLUjVh-1715723851407)]
[外链图片转存中...(img-03HxNHTX-1715723851407)]

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值