#include <bits/stdc++.h>
using namespace std;
int n;
// h[i].first: lưu cân nặng
// h[i].Second: lưu vị trí ban đầu của của h[i]
// Sau khi sắp xếp lại mảng vì vị trí thay đổi nên cần lưu vị trí ban đầu
pair<int, int> h[105];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> h[i].first;
h[i].second = i;
}
// Sắp xếp lại mảng để có thứ tự từ nhẹ nhất đến nặng nhất
// Từ đó có thể xếp vào được nhiều người nhất có thể
// Mảng bắt đầu từ 1 nên sắp xếp từ iterator h+1 đến h+n+1
sort(h+1, h+n+1);
// Số người mà đã vào thang máy
int m = 0;
// Tổng số cân nặng của những người đã được xếp vào thang máy
int sum_weight = 0;
// Những người đã được vào thang máy
vector<pair<int, int>> b;
while (sum_weight + h[m+1].first <= 500 && m+1 <= n) {
// Nếu tổng số cân nặng của những người đã được xếp vào thang máy ít hơn 500 thì vẫn thêm đc vào
m++; sum_weight += h[m].first;
// Thêm h[i] vào b, lần này vị trí của h[i] trong h sẽ đặt làm first để sắp xếp lại theo thứ tự
b.push_back(make_pair(h[m].second, h[m].first));
}
// Sắp xếp lại b theo thứ tự vị trí
sort(b.begin(), b.end());
// In kết quả
cout << sum_weight << "\n";
for (int i = 0; i < b.size(); i++) {
cout << b[i].second << " ";
}
return 0;
}
$\underline{\text{Cách làm:}}$
Nhập n, mảng a.
Sắp xếp mảng a theo thứ tự tăng dần, tạo biến s dùng để tính tổng, mảng b để lưu lại những khối lượng có thể vào thang máy (nếu a[i] có thể vào thì b[a[i]]++), khi i==n hoặc s+a[i]>500 thì kết thúc và trả về kết quả.
Duyệt mảng a, nếu vị trí thứ a[i] của mảng b !=0 thì xuất a[i], nếu a[i] đã vào thì b[a[i]]--.
$\\$
$\underline{\text{Code:}}$
#include <iostream>
#include <algorithm>
using namespace std;
struct v{
int sum;
int *arr;
};
v t(int arr[], int n)
{
int s = 0;
int b[1000];
for (int i=0; i<=1000; i++) b[i]=0;
int a[n];
for (int i=0; i<n; i++) a[i]=arr[i];
sort(a,a+n);
for (int i=0; i<n; i++)
{
if (s+a[i]>500) break;
s+=a[i];
b[a[i]]++;
}
v r;
r.sum=s;
r.arr=b;
return r;
}
int main()
{
int n;
cin >> n;
int a[n];
for (int i=0; i<n; i++) cin >> a[i];
v h = t(a,n);
cout << h.sum << endl;
for (int i=0; i<n; i++)
{
if (h.arr[a[i]]!=0) {cout << a[i] << " "; h.arr[a[i]]--;}
}
}
$\\$
`@Daoanhviet96`
Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.
Nguồn : Wikipedia - Bách khoa toàn thưLớp 8 - Năm thứ ba ở cấp trung học cơ sở, học tập bắt đầu nặng dần, sang năm lại là năm cuối cấp áp lực lớn dần nhưng các em vẫn phải chú ý sức khỏe nhé!
Nguồn : ADMIN :))Xem thêm tại https://loigiaisgk.com/cau-hoi or https://giaibtsgk.com/cau-hoi
Copyright © 2021 HOCTAPSGK