做网站用什么软件免费郑州网站科技

张小明 2026/1/1 23:05:49
做网站用什么软件免费,郑州网站科技,竞价交易,伪原创php网站镜像同步程序在算法设计中#xff0c;圆形石子合并问题是经典的动态规划应用场景之一。本文将详细讲解该问题的解法#xff0c;并用 C 实现 3 种不同算法#xff0c;最后对比它们的优劣。 一、问题描述 在圆形操场周围有 n 堆石子#xff0c;每次只能合并相邻的 2 堆#xff0c;合并…在算法设计中圆形石子合并问题是经典的动态规划应用场景之一。本文将详细讲解该问题的解法并用 C 实现 3 种不同算法最后对比它们的优劣。一、问题描述在圆形操场周围有n堆石子每次只能合并相邻的 2 堆合并得分是新堆的石子数。求将所有石子合并为 1 堆的最小得分和最大得分。二、算法 1基础动态规划环形转线性思路圆形结构可通过复制数组转化为线性结构长度为2n再用区间 DP 求解定义dp_min[i][j]合并区间[i,j]的最小得分定义dp_max[i][j]合并区间[i,j]的最大得分状态转移dp_min[i][j]min(dp_min[i][k]dp_min[k1][j])sum(i,j)(i≤kj)dp_max[i][j]max(dp_max[i][k]dp_max[k1][j])sum(i,j)(i≤kj)sum(i,j)是区间[i,j]的石子总数用前缀和快速计算C 代码#include iostream #include vector #include climits using namespace std; // 计算前缀和 vectorint getPrefixSum(const vectorint arr) { vectorint pre(arr.size() 1, 0); for (int i 0; i arr.size(); i) { pre[i1] pre[i] arr[i]; } return pre; } // 区间[i,j]的和基于前缀和 int getSum(const vectorint pre, int i, int j) { return pre[j1] - pre[i]; } pairint, int stoneMergeDP(vectorint stones) { int n stones.size(); if (n 1) return {0, 0}; // 环形转线性复制数组 vectorint arr stones; arr.insert(arr.end(), stones.begin(), stones.end()); vectorint pre getPrefixSum(arr); int len 2 * n; vectorvectorint dp_min(len, vectorint(len, 0)); vectorvectorint dp_max(len, vectorint(len, 0)); // 枚举区间长度从2到n for (int l 2; l n; l) { for (int i 0; i l len; i) { int j i l - 1; dp_min[i][j] INT_MAX; dp_max[i][j] INT_MIN; // 枚举分割点 for (int k i; k j; k) { int sum getSum(pre, i, j); dp_min[i][j] min(dp_min[i][j], dp_min[i][k] dp_min[k1][j] sum); dp_max[i][j] max(dp_max[i][j], dp_max[i][k] dp_max[k1][j] sum); } } } // 遍历所有长度为n的区间取最小/最大值 int min_res INT_MAX, max_res INT_MIN; for (int i 0; i n; i) { min_res min(min_res, dp_min[i][i n - 1]); max_res max(max_res, dp_max[i][i n - 1]); } return {min_res, max_res}; } int main() { vectorint stones {4, 1, 2, 3}; // 测试用例 auto [min_score, max_score] stoneMergeDP(stones); cout 最小得分 min_score endl; cout 最大得分 max_score endl; return 0; }三、算法 2贪心算法仅适用于链形 特殊条件思路贪心算法仅在链形结构 石子数非递减 / 非递增时有效圆形结构不适用核心是最小得分每次合并最小的相邻两堆类似哈夫曼编码最大得分每次合并最大的相邻两堆C 代码链形场景#include iostream #include vector #include queue using namespace std; // 贪心求最小得分链形 int greedyMin(vectorint stones) { priority_queueint, vectorint, greaterint pq(stones.begin(), stones.end()); int res 0; while (pq.size() 1) { int a pq.top(); pq.pop(); int b pq.top(); pq.pop(); res a b; pq.push(a b); } return res; } // 贪心求最大得分链形 int greedyMax(vectorint stones) { priority_queueint pq(stones.begin(), stones.end()); int res 0; while (pq.size() 1) { int a pq.top(); pq.pop(); int b pq.top(); pq.pop(); res a b; pq.push(a b); } return res; } int main() { vectorint stones {4, 1, 2, 3}; // 链形测试用例 cout 链形最小得分贪心 greedyMin(stones) endl; cout 链形最大得分贪心 greedyMax(stones) endl; return 0; }四、算法 3记忆化搜索递归 缓存思路基于基础 DP 的递归实现用记忆化缓存避免重复计算逻辑与基础 DP 一致但代码更简洁。C 代码#include iostream #include vector #include climits #include unordered_map using namespace std; vectorint pre; vectorvectorint memo_min, memo_max; int n; int dfs_min(int i, int j) { if (i j) return 0; if (memo_min[i][j] ! -1) return memo_min[i][j]; int res INT_MAX; for (int k i; k j; k) { int sum pre[j1] - pre[i]; res min(res, dfs_min(i, k) dfs_min(k1, j) sum); } return memo_min[i][j] res; } int dfs_max(int i, int j) { if (i j) return 0; if (memo_max[i][j] ! -1) return memo_max[i][j]; int res INT_MIN; for (int k i; k j; k) { int sum pre[j1] - pre[i]; res max(res, dfs_max(i, k) dfs_max(k1, j) sum); } return memo_max[i][j] res; } pairint, int stoneMergeMemo(vectorint stones) { n stones.size(); if (n 1) return {0, 0}; vectorint arr stones; arr.insert(arr.end(), stones.begin(), stones.end()); pre.resize(arr.size() 1, 0); for (int i 0; i arr.size(); i) { pre[i1] pre[i] arr[i]; } memo_min.assign(2*n, vectorint(2*n, -1)); memo_max.assign(2*n, vectorint(2*n, -1)); int min_res INT_MAX, max_res INT_MIN; for (int i 0; i n; i) { min_res min(min_res, dfs_min(i, i n - 1)); max_res max(max_res, dfs_max(i, i n - 1)); } return {min_res, max_res}; } int main() { vectorint stones {4, 1, 2, 3}; auto [min_score, max_score] stoneMergeMemo(stones); cout 最小得分记忆化 min_score endl; cout 最大得分记忆化 max_score endl; return 0; }五、算法优劣对比算法时间复杂度空间复杂度适用场景优点缺点基础 DPO(n3)O(n2)圆形 / 链形通用、结果准确时间复杂度高贪心算法O(nlogn)O(n)链形 特殊石子序列效率高圆形场景不适用、结果可能错误记忆化搜索O(n3)O(n2)圆形 / 链形代码简洁、逻辑直观递归栈深度限制、效率略低于迭代 DP六、总结圆形石子合并问题的最优解法是基础动态规划或记忆化搜索贪心算法仅适用于特殊场景。实际应用中若n较大如n100需优化 DP如四边形不等式优化时间复杂度可降为 O(n2)。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站制作关键政务网站建设经验交流发言

EmotiVoice在广告配音中实现情绪引导效果 在今天的数字营销战场,一条广告能否打动人心,往往不在于它说了什么,而在于它是“怎么说”的。尤其是在音频广告、短视频旁白和智能语音交互场景中,声音的情绪张力正成为影响用户注意力、信…

张小明 2026/1/1 23:03:47 网站建设

房地产营销门户网站开发富阳区住房和城乡建设局网站

最近,一位做跨境电商的朋友跟我吐槽:“我花20万找软件外包公司做了个后台系统,结果上线三天就崩了两次,代码根本没法维护。早知道还不如自己招人!”听起来很惨,但问题可能不在“软件外包”本身——而在于他…

张小明 2026/1/1 23:01:45 网站建设

百度推广手机网站检测永登县建设局网站

第一章:MCP DP-420图Agent性能优化概述 在分布式计算环境中,MCP DP-420图Agent作为关键的数据处理与任务调度组件,其性能直接影响整体系统的响应速度与资源利用率。随着数据规模的增长和业务复杂度的提升,传统的Agent运行机制面临…

张小明 2026/1/1 22:59:43 网站建设

织梦网站专题页面如何做wordpress内页长尾词排名

各大内容平台对AI语音的政策解读 在短视频、播客和虚拟内容爆发式增长的今天,声音正在成为人机交互的核心媒介之一。你有没有注意到,越来越多的有声书主播听起来“完美得不像真人”?一些虚拟偶像的语气起伏自然到仿佛真人在演绎情绪&#xff…

张小明 2026/1/1 22:57:41 网站建设

运城推广型网站开发ipv6跟做网站有关吗

你知道如何在数小时内完成传统药物筛选需要数周才能完成的工作量吗?🚀 AutoDock Vina作为计算生物学领域的"加速引擎",正在重新定义分子对接的效率和精度标准。今天,让我们一起深度探索这个强大工具背后的技术奥秘&…

张小明 2026/1/1 22:55:39 网站建设

织梦网站首页栏目修改网络服务广告

Windows Media Player使用指南:音乐、视频播放与光盘操作全解析 1. 播放播放列表中的音乐文件 Windows Media Player能播放多种类型的数字音乐文件。当你让它播放某首歌曲或专辑时,它会立即将其添加到“正在播放”列表中,该列表中的项目会按顺序依次播放。 2. Windows隐私…

张小明 2026/1/1 22:53:37 网站建设