文章
6
粉丝
38
获赞
1
访问
2.7k
#include <iostream>
#include <vector>
using namespace std;
bool canAchieveSum(const vector<int>& weights, int s) {
// 创建动态规划数组,大小为s+1
vector<bool> dp(s + 1, false);
dp[0] = true; // 初始化,0重量总是可达的
// 遍历每个物品
for (int weight : weights) {
// 从后往前更新dp数组
for (int j = s; j >= weight; j--) {
if (dp[j - weight]) {
dp[j] = true;
}
}
}
// 返回能否恰好拼凑出重量s
return dp[s];
}
int main() {
int s, n;
while (cin >> s >> n) {
vector<int> weights(n);
for (int i = 0; i < n; ++i) {
cin >> weights[i];
}
// 判断是否可以凑出重量s
if (canAchieveSum(weights, s)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
假设我们有一个背包,最大承重为 s = 20,物品的重量分别为 [...
登录后发布评论
暂无评论,来抢沙发