C++ 运用动态规划与双重循环枚举给定数组的所有非递减子序列(附代码)
这是一个经典的动态规划问题,可以使用双重循环来解决。以下是一个C++的解决方案: ```cpp #include <iostream> #include <vector> using namespace std; vector<vector<int>> allSubseq(vector<int>& nums) { vector<vector<int>> dp(nums.size() + 1, vector<int>(nums.size() + 1, 0)); for (int i = 1; i <= nums.size(); i++) { for (int j = 1; j <= nums.size(); j++) { dp[i][j] = dp[i - 1][j]; if (nums[i - 1] <= nums[j - 1]) { dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1); } } } vector<vector<int>> res; for (int i = 1; i <= nums.size(); i++) { for (int j = 1; j <= nums.size(); j++) { if (dp[i][j] == i) { vector<int> subseq; for (int k = i; k >= 1; k--) { subseq.push_back(nums[k - 1]); if (dp[k][j] != dp[k - 1][j]) { break; } } reverse(subseq.begin(), subseq.end()); res.push_back(subseq); } } } return res; } int main() { vector<int> nums = {1, 2, 3, 4, 5}; vector<vector<int>> res = allSubseq(nums); for (auto subseq : res) { for (auto num : subseq) { cout << num << " "; } cout << endl; } return 0; } ``` 这个程序首先创建了一个二维数组dp,其中dp[i][j]表示前i个元素中最大的非递减子序列的长度。然后,程序遍历dp数组,如果nums[i - 1] <= nums[j - 1],那么dp[i][j]就等于dp[i - 1][j - 1] + 1,否则dp[i][j]就等于dp[i - 1][j]。 程序遍历dp数组,如果dp[i][j]等于i,那么就找到了一个非递减子序列,程序将其添加到结果列表中。 ######[AI写代码神器 | 523点数解答 | 2023-11-09 00:49:15]
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)56
- Python枚举:找出满足特定条件的所有3位完全平方数(DeepSeek | 442点数解答 | 2025-03-07 18:52:14)144
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)465
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)356
- C++实现读取数字并输出最小值的代码及解释(字节豆包 | 113点数解答 | 2026-03-20 19:32:56)12
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)16
- Python 高效求解:让数列变身接龙数列最少需删多少数?(字节豆包 | 493点数解答 | 2025-12-13 10:25:59)62
- 深入解析格雷码生成算法:递归求解与代码实现(DeepSeek | 443点数解答 | 2026-01-05 12:21:49)52
- 无名杀1.11.0:三国杀“韬晦”技能代码详解,开发避坑指南! (百度文心 | 1168点数解答 | 2026-01-12 21:02:27)53
- 深入探究:n 位格雷码中编号 k 二进制串的求解算法与实现(DeepSeek | 726点数解答 | 2026-01-13 12:31:37)52
- iOS开发揭秘:序列(Sequence)索引是否从0开始?实例为你解答!(百度文心 | 187点数解答 | 2023-11-09 17:44:38)244
- MATLAB实现r5(n)序列离散傅立叶变换及补零至20长序列DFT计算 (GPT | 339点数解答 | 2024-10-28 16:31:47)275