A. 淘淘捡西瓜
题目描述
地上有一排西瓜,每个西瓜都有自己的重量。淘淘有一个包,包的容量是固定的,淘淘希望尽可能在包里装更多的西瓜(当然要装整个的,不能切开装),请问淘淘的包最多能装下多少个西瓜?
输入
第一行两个整数 n,xn,x ,表示有 nn 个西瓜,背包容量是xx 。( 1 \sim n \sim 1001∼n∼100 ) 下面 nn 个整数数,表示西瓜的重量。
输出
一个整数,表示淘淘最多能装多少西瓜回家。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> wm(n);
for (int i = 0; i < n; i++) {
cin >> wm[i];
}
sort(wm.begin(), wm.end());
int ans = 0;
for (int i = 0; i < n; i++) {
if (wm[i] <= m) {
m -= wm[i];
ans++;
}
else {
break;
}
}
cout << ans << endl;
return 0;
}
【以下回答由 GPT 生成】
我可以解决这个问题。
具体解决方案如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
vector<int> weights(n);
for (int i = 0; i < n; i++) {
cin >> weights[i];
}
// 排序
sort(weights.begin(), weights.end());
// 省略其他代码
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
vector<int> weights(n);
for (int i = 0; i < n; i++) {
cin >> weights[i];
}
// 排序
sort(weights.begin(), weights.end());
// 省略其他代码
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
vector<int> weights(n);
for (int i = 0; i < n; i++) {
cin >> weights[i];
}
// 排序
sort(weights.begin(), weights.end());
int count = 0;
for (int i = 0; i < n; i++) {
if (x >= weights[i]) {
count++;
x -= weights[i];
} else {
break;
}
}
// 省略其他代码
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
vector<int> weights(n);
for (int i = 0; i < n; i++) {
cin >> weights[i];
}
// 排序
sort(weights.begin(), weights.end());
int count = 0;
for (int i = 0; i < n; i++) {
if (x >= weights[i]) {
count++;
x -= weights[i];
} else {
break;
}
}
cout << count << endl;
return 0;
}
这样,我们就得到了淘淘最多能装多少个西瓜。
不过,如果有早上照理由一个次序,应该取最重的那个放再取最轻,这样装的东西会多。