Một nhà máy nhận được 3 đơn hàng.
o Đơn hàng 1 đăng kí làm từ thời điểm 𝑥[1] đến 𝑦[1], giá trị đơn hàng là 𝑐[1].
o Đơn hàng 2 đăng kí làm từ thời điểm 𝑥[2] đến 𝑦[2], giá trị đơn hàng là 𝑐[2].
o Đơn hàng 3 đăng kí làm từ thời điểm 𝑥[3] đến 𝑦[3], giá trị đơn hàng là 𝑐[3].
Do đặc điểm của nhà máy, tại một thời điểm chỉ thực hiện được một đơn hàng và khi hoàn thành
đơn hàng này thì mới có thể thực hiện đơn hàng khác. Tức là hai đơn hàng không được nhà máy nhận
làm nếu quãng thời gian thực hiện của chúng có giao nhau.
Yêu cầu: Tính xem, nhà hàng có thể chọn các đơn hàng nào để thực hiện sao cho tổng giá trị các đơn
hàng đó là lớn nhất.
Dữ liệu nhập gồm:
• Dòng 1 ghi 3 số nguyên dương 𝑥[1], 𝑦[1], 𝑐[1], (1 ≤ 𝑥[1] < 𝑦[1] ≤ 109
; 1 ≤ 𝑐[1] ≤ 109
).
• Dòng 2 ghi 3 số nguyên dương 𝑥[2], 𝑦[2], 𝑐[2], (1 ≤ 𝑥[2] < 𝑦[2] ≤ 109
; 1 ≤ 𝑐[2] ≤ 109
).
• Dòng 3 ghi 3 số nguyên dương 𝑥[3], 𝑦[3], 𝑐[3], (1 ≤ 𝑥[3] < 𝑦[3] ≤ 109
; 1 ≤ 𝑐[3] ≤ 109
).
Kết quả ghi ra gồm một số nguyên tổng giá trị các đơn hàng được chọn.
Ví dụ:
Input Output Giải thích
1 4 10
2 5 10
6 8 1
11 Chọn đơn hàng 1 và 3 hoặc
chọn đơn hàng 2 và 3.
1 4 10
2 7 100
6 8 1
100 Chọn đơn hàng 2
C++
Hint : sử dụng bit
#include <bits/stdc++.h>
using namespace std;
struct cth {
long long a, b, c;
};
bool check(const cth &A, const cth &B) {
return A.b > B.a && B.b > A.a;
}
void solve() {
vector<cth> z(3);
for (long long i = 0; i < 3; ++i) {
cin >> z[i].a >> z[i].b >> z[i].c;
}
long long mx = 0;
for (long long i = 0; i < (1 << z.size()); ++i) {
vector<cth> t;
long long s = 0;
bool tt = true;
for (long long j = 0; j < z.size(); ++j) {
if (i & (1 << j)) {
for (const auto &order : t) {
if (check(order, z[j])) {
tt = false;
break;
}
}
if (!tt) break;
t.push_back(z[j]);
s += z[j].c;
}
}
if (tt) {
mx = max(mx, s);
}
}
cout << mx;
}
int main() {
freopen("badh.inp" , "r" , stdin);
freopen("badh.out" , "w" , stdout);
ios::sync_with_stdio(false);
cin.tie(0);
int tt = 1;
//cin >> tt;
while (tt--) solve();
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);cin.tie(0);
struct C{long long a,b,c;};
vector<C> z(3);
for(auto &x:z)cin>>x.a>>x.b>>x.c;
long long m=0;
for(int i=0;i<(1<<3);++i){
vector<C> t;
long long s=0;
bool v=1;
for(int j=0;j<3;++j){
if(i&(1<<j)){
bool o=0;
for(auto &x:t){
if(x.b>z[j].a&&z[j].b>x.a){
o=1;
break;
}
}
if(o){
v=0;
break;
}
t.push_back(z[j]);
s+=z[j].c;
}
}
if(v)m=max(m,s);
}
cout<<m<<endl;
return 0;
}
Tin học 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. 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. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!
Lớp 12 - Năm cuối ở cấp trung học phổ thông, năm học quan trọng nhất trong đời học sinh, trải qua bao năm học tập, bao nhiêu kỳ vọng của người thân xung quanh. Những nỗi lo về thi đại học và định hướng tương lai thật là nặng nề. Hãy tin vào bản thân, mình sẽ làm được và tương lai mới đang chờ đợi chúng ta!
Copyright © 2021 HOCTAPSGK