地上有一排西瓜,每个西瓜都有自己的重量。淘淘有一个包,包的容量是固定的,淘淘希望尽可能在包里装更多的西瓜(当然要装整个的,不能切开装),请问淘淘的包最多能装下多少个西瓜c++

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 生成】

我可以解决这个问题。

具体解决方案如下:

  1. 首先,我们需要读入输入的数据,包括西瓜的个数n、背包容量x,以及每个西瓜的重量。
#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());

    // 省略其他代码
}
  1. 接下来,我们按照贪心算法的思想,将西瓜按重量从小到大排序。这样可以使得我们先装入重量较小的西瓜,从而尽可能多地装入更多的西瓜。
#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());

    // 省略其他代码
}
  1. 接下来,我们使用一个变量count来记录装入包的西瓜的个数。然后我们从重量最小的西瓜开始,依次尝试将其装入包中,直到背包容量被占满或者无法再装入更多的西瓜为止。
#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;
        }
    }

    // 省略其他代码
}
  1. 最后,我们输出最多能装多少个西瓜。
#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;
}

这样,我们就得到了淘淘最多能装多少个西瓜。

不过,如果有早上照理由一个次序,应该取最重的那个放再取最轻,这样装的东西会多。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^