C++ 算法:最大独立集问题求解(示例代码)
非常抱歉再次给出错误的答案。根据您给出的样例输入和输出,我再次修改了代码。以下是根据样例进行修改后的代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, a, b;
cin >> n >> a >> b;
vector<int> dp(n + 1, 0);
dp[0] = 0; // 边界条件
for (int i = 1; i <= n; i++) {
if (i - a >= 0 && dp[i - a] + 1 > dp[i]) {
dp[i] = dp[i - a] + 1;
}
if (i - b >= 0 && dp[i - b] + 1 > dp[i]) {
dp[i] = dp[i - b] + 1;
}
}
int maxIndSetSize = dp[n];
cout << maxIndSetSize << endl;
return 0;
}
在这个修改后的代码中,我们只使用了一个一维数组 dp 来记录状态。通过循环遍历,根据状态转移方程计算 dp[i] 的值,并记录最大的独立集大小。
请尝试使用样例输入运行代码,得到最大独立集的大小。这次应该能够得到正确的输出。非常抱歉之前给出的错误答案带来的困扰。
原文地址: http://www.cveoy.top/t/topic/bLYG 著作权归作者所有。请勿转载和采集!