当前位置: 首页 > news >正文

笔试专题(十四)

文章目录

  • mari和shiny
    • 题解
    • 代码
  • 体操队形
    • 题解
    • 代码
  • 二叉树中的最大路径和
    • 题解
    • 代码

mari和shiny

题目链接
在这里插入图片描述

题解

1. 可以用多状态的线性dp
2. 细节处理:使用long long 存储个数
3. 空间优化:只需要考虑等于’s’,‘sh’,'shy’的情况,因为等于的情况,前面会保存起来,不需要统计

在这里插入图片描述
在这里插入图片描述

代码

#include<iostream>
#include<string>using namespace std;int main()
{int n;string str;cin >> n >> str;long long s = 0,sh = 0,shy = 0;for(int i = 0;i < n;i++){char ch = str[i];if(ch == 's') s++;else if(ch == 'h') sh += s;else if(ch == 'y') shy += sh;}cout << shy << '\n';return 0;
}

体操队形

题目链接
在这里插入图片描述

题解

1. dfs
2. 画出一颗决策树比什么都重要,一定要画图,然后仔细想,返回条件,剪枝,pos位置,每个位置枚举几个点啊,题目要求的剪枝等等

在这里插入图片描述

代码

#include<iostream>using namespace std;int n;
int a[15];
int ans;
bool vis[15];// 标记用过的数字void dfs(int pos)
{if(pos == n + 1){ans++;return;}for(int i = 1;i <= n;i++){// 剪枝// 如果不满足i排在a[i]的前面的话// if(vis[i]) continue;// 表示i这个点已经用过了,// 这个位置要枚举下一个点,看是否也用过了,剪枝// if(vis[a[i]]) return;// 2号这个点要放在1号前面,// 但是1号已经用过了,后面所有数都是错的了,所以剪枝if(vis[i] == false){// if(vis[a[i]]) return;// 为什么这句不能放在vis[i] = false的外面// 单独这句确实不行,因为i每次从1开始,会导致错误// 但下一次递归需要剪枝用过的点if(vis[a[i]]) return;// 未用过的点才会进来vis[i] = true;dfs(pos+1);// 为什么不能用i+1// o,因为每次进来都是i+1位置,// i都是1,i+1= 2每次都是二号位置vis[i] = false;}}return;
}
int main()
{cin >> n;for(int i = 1;i <= n;i++) cin >> a[i];dfs(1);cout << ans << '\n';return 0;
}

二叉树中的最大路径和

题目链接
在这里插入图片描述

题解

1. dfs,树形dp
2. 可以分解为子问题,求每条路径的最大单链和,为什么是单链和呢?因为不能走回头路,一个节点只能包含一次,那么可以求左子树的最大单链和,右子树的最大单链和
3. 返回值是以我为根节点的最大单链和,要么是我自己,要么是我自己加上右子树,要么是我自己加上左子树
4. 每次都需要更新最大的单链和,我自己加上左右子树,因为不一定经过根节点

在这里插入图片描述

在这里插入图片描述

代码

class Solution 
{
public:int ret = INT_MIN;int maxPathSum(TreeNode* root) {dfs(root);return ret;}// 要返回左右子树的最大单链和int dfs(TreeNode* root){if(root == nullptr) return 0;int left = max(dfs(root->left),0);int right = max(dfs(root->right),0);int k = root->val + left + right;ret = max(ret,k);return root->val + max(left,right);}
};
http://www.xdnf.cn/news/253891.html

相关文章:

  • 基于C++、JsonCpp、Muduo库实现的分布式RPC通信框架
  • c语言的常用关键字
  • (六——下)RestAPI 毛子(Http resilience/Refit/游标分页)
  • math.atan2(y, x)
  • 人工智能搜索时代的SEO:关键趋势与优化策略
  • PyTorch 2.0编译模式深度评测:图优化对GPU利用率的影响
  • LabVIEW 中VI Server导出 VI 配置
  • 深入理解 C++ 数据类型:从基础到高级应用
  • JDBC编程实战:从基础连接到高效连接池应用
  • 【五一培训】Day 2
  • 多模态大模型轻量化探索-开源SmolVLM模型架构、数据策略及其衍生物PDF解析模型SmolDocling
  • 工作记录 2017-12-12 + 在IIS下发布wordpress
  • 程序员转行酒店用品客户经理
  • 算法界的“达摩克利斯之剑”——NP完全性理论
  • C++ std::initializer_list 详解
  • 网工_UDP协议
  • NFS 快速开始
  • ppt设计美化公司_杰青_长江学者_优青_青年长江学者_万人计划青年拔尖人才答辩ppt模板
  • AE/PR插件 转场创建大师专业版 Transition Master Pro v2.0.2 Win+使用教程
  • tinycudann安装过程加ubuntu18.04gcc版本的升级(成功版!!!!)
  • 计算机网络01-网站数据传输过程
  • aws(学习笔记第四十课) image-content-search
  • [Linux]从零开始的STM32MP157 Buildroot根文件系统构建
  • 如何实现服务的自动扩缩容(Auto Scaling)
  • Kotlin Flow流
  • GZIPInputStream 类详解
  • Linux_sudo命令的使用与机制
  • 5.2刷题
  • libevent库详解:高性能异步IO的利器
  • python 常用web开发框架及使用示例