C++ 实现数组染色最大得分算法:动态规划解法
"#include <iostream>\n#include <vector>\nusing namespace std;\n\nint maxScore(vector<int>& nums, string colors) {\n int n = nums.size();\n vector<int> red;\n vector<int> blue;\n for (int i = 0; i < n; i++) {\n if (colors[i] == 'R') {\n red.push_back(nums[i]);\n } else {\n blue.push_back(nums[i]);\n }\n }\n int m = red.size();\n int p = blue.size();\n vector<vector<int>> dp(m + 1, vector<int>(p + 1, 0));\n for (int len = 2; len <= m + p; len++) {\n for (int i = 0; i <= len; i++) {\n int j = len - i;\n if (i <= m && j <= p) {\n int sum1 = 0;\n int sum2 = 0;\n if (i > 0) {\n sum1 = red[i-1];\n }\n if (j > 0) {\n sum2 = blue[j-1];\n }\n for (int k = i; k < i + j; k++) {\n dp[i][j] = max(dp[i][j], dp[i][k] + dp[k+1][j] + sum1 + sum2);\n }\n }\n }\n }\n return dp[m][p];\n}\n\nint main() {\n int n;\n cin >> n;\n vector<int> nums(n);\n for (int i = 0; i < n; i++) {\n cin >> nums[i];\n }\n string colors;\n cin >> colors;\n int result = maxScore(nums, colors);\n cout << result << endl;\n return 0;\n}\n"
原文地址: https://www.cveoy.top/t/topic/pDgy 著作权归作者所有。请勿转载和采集!