一个数组分为两个sum相等的数组
vector,问是否可以拆成两部分,使其两部分的总和相同,用代码写一下
#include <iostream>
#include <vector>
using namespace std;
bool canPartition(vector<int>& nums) {
int sum = 0;
for (int num : nums) {
sum += num;
}
// 总和为奇数,无法拆分
if (sum % 2 != 0) return false;
int target = sum / 2;
vector<bool> dp(target + 1, false);
dp[0] = true; // 0 可以由空集组成
// 遍历数组,填充 dp 数组
for (int num : nums) {
for (int j = target; j >= num; --j) { // 逆序遍历
dp[j] = dp[j] || dp[j - num];
}
}
return dp[target];
}
int main() {
vector<int> nums = {1, 5, 11, 5};
if (canPartition(nums)) {
cout << "可以拆分成两部分,总和相等" << endl;
} else {
cout << "无法拆分成两部分,总和相等" << endl;
}
return 0;
}