9.19小米笔试
第一题用0-1背包的思想,但是一直只能过64% ,好想知道为什么
#include<iostream>
#include<algorithm>
#include <vector>
using namespace std;
bool isValid (vector<int>& weight, int bagSize, int q) {
int len = weight.size();
vector<vector<bool>> dp(len + 1, vector<bool>(bagSize + 1, false));
dp[0][0] = true;
bool flag = false;
for (int i = 1; i < len; ++i) {
for (int j = 0; j <= bagSize; ++j) {
if (j < weight[i-1]) dp[i][j] = dp[i-1][j];
else if (j == weight[i-1]) dp[i][j] = true;
else if (weight[i-1] < j && weight[i-1] + q >= j) dp[i][j] = true;
else dp[i][j] = dp[i-1][j - weight[i-1]];
if (j == bagSize && dp[i][j]) return true;
}
}
return dp[len][bagSize];
}
int main(void)
{
int t;
cin >> t;
while (t--) {
int bagSize, n, q;
cin >> bagSize >> n >> q;
vector<int> weight(n);
for (int i = 0; i < n; ++i) cin >> weight[i];
if (isValid(weight, bagSize, q)) cout << "YES" << endl;
else cout << "NO" << endl;
}
}
#include<iostream>
#include<algorithm>
#include <vector>
using namespace std;
bool isValid (vector<int>& weight, int bagSize, int q) {
int len = weight.size();
vector<vector<bool>> dp(len + 1, vector<bool>(bagSize + 1, false));
dp[0][0] = true;
bool flag = false;
for (int i = 1; i < len; ++i) {
for (int j = 0; j <= bagSize; ++j) {
if (j < weight[i-1]) dp[i][j] = dp[i-1][j];
else if (j == weight[i-1]) dp[i][j] = true;
else if (weight[i-1] < j && weight[i-1] + q >= j) dp[i][j] = true;
else dp[i][j] = dp[i-1][j - weight[i-1]];
if (j == bagSize && dp[i][j]) return true;
}
}
return dp[len][bagSize];
}
int main(void)
{
int t;
cin >> t;
while (t--) {
int bagSize, n, q;
cin >> bagSize >> n >> q;
vector<int> weight(n);
for (int i = 0; i < n; ++i) cin >> weight[i];
if (isValid(weight, bagSize, q)) cout << "YES" << endl;
else cout << "NO" << endl;
}
}
全部评论
相关推荐
点赞 评论 收藏
分享
2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用
2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的
3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单
4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价 点赞 评论 收藏
分享
查看12道真题和解析
格力工作强度 328人发布