假设我们有一个称为nums的数字列表,现在找到两组,因为它们的总和相同且为最大值,然后找到总和值。
因此,如果输入类似于nums = [2,5,4,6],则输出将为6,因为集合为[2,4]和[6]。
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(vector<int>& nums) { int sum = 0; for (int i : nums) sum += i; int n = nums.size(); vector<vector<int> > dp(n + 1, vector<int>(2 * sum + 5, -1)); dp[0][sum] = 0; for (int i = 1; i <= n; i++) { int x = nums[i - 1]; for (int j = 0; j < 2 * sum + 5; j++) { if (j - x >= 0 && dp[i - 1][j - x] != -1) { dp[i][j] = max(dp[i][j], dp[i - 1][j - x] + x); } if (j + x < 2 * sum + 5 && dp[i - 1][j + x] != -1) { dp[i][j] = max(dp[i][j], dp[i - 1][j + x]); } dp[i][j] = max(dp[i][j], dp[i - 1][j]); } } return dp[n][sum]; } }; int solve(vector<int>& nums) { return (new Solution())->solve(nums); } main(){ vector<int> v = {2, 5, 4, 6}; cout << solve(v); }
{2, 5, 4, 6}输出结果
6