admin管理员组文章数量:1437234
【今日三题】游游的重组偶数(模拟) / 体操队形(回溯) / 二叉树中的最大路径和(树形dp)
游游的重组偶数(模拟)
- 游游的重组偶数
代码语言:javascript代码运行次数:0运行复制如果需要操作整数的位,可以将这个整数作为字符串读入,方便操作。 首先判断读入整数是否本来就是偶数,如果不是再从头遍历找有没有哪一位是偶数,如果存在则和最后一位交换,然后返回。
#include <iostream>
#include <string>
using namespace std;
int func(string s)
{
int n = s.size();
if ((s[n - 1] - '0') % 2 == 0) return stoi(s);
for (int i = 0; i < n; i++)
{
if ((s[i] - '0') % 2 == 0)
{
swap(s[i], s[n - 1]);
return stoi(s);
}
}
return -1;
}
int main()
{
int q;
cin >> q;
while (q--)
{
string x;
cin >> x;
cout << func(x) << endl;
}
return 0;
}
体操队形(回溯)
- 体操队形
代码语言:javascript代码运行次数:0运行复制枚举每个位置的情况,画出决策树,一切都好办。
#include <iostream>
using namespace std;
int n, arr[11], res;
bool used[11];
void dfs(int pos)
{
if (pos == n + 1)
{
res++;
return;
}
for (int i = 1; i <= n; i++)
{
if (used[i]) continue;
if (used[arr[i]]) return; // 剪枝
used[i] = true;
dfs(pos + 1);
used[i] = false;
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) cin >> arr[i];
dfs(1);
cout << res << endl;
return 0;
}
二叉树中的最大路径和(树形dp)
- 二叉树中的最大路径和
代码语言:javascript代码运行次数:0运行复制最大路径和 = 当前节点值 + 左子树最大单链和 + 右子树最大单链和。
class Solution {
public:
int res = -0x3f3f3f3f;
int maxPathSum(TreeNode* root) {
dfs(root);
return res;
}
int dfs(TreeNode *root)
{
if (root == nullptr) return 0;
int l = max(0, dfs(root->left)); // 左子树最大单链和
int r = max(0, dfs(root->right)); // 右子树最大单链和
res = max(res, root->val + l + r); // 当前节点最大路径和
return root->val + max(l, r); // 返回当前最大单链和
}
};
本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-05-03,如有侵权请联系 cloudcommunity@tencent 删除遍历二叉树dpintreturn本文标签: 今日三题游游的重组偶数(模拟)体操队形(回溯)二叉树中的最大路径和(树形dp)
版权声明:本文标题:【今日三题】游游的重组偶数(模拟)体操队形(回溯)二叉树中的最大路径和(树形dp) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1747409193a2695095.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论