Mô tả bài toán
Cần bán p xe đỏ, q xe xanh. Kho có a xe đỏ, b xe xanh, c xe trắng (có thể sơn đỏ hoặc xanh). Giá các xe cho trước. Tối đa hóa tổng giá trị xe bán được.
Ví dụ
p=3,q=3,a=3,b=3,c=2, A={150000,200000,200000}, B={150000,120000,180000}, C={210000,160000,150000}. Đầu ra: 1100000.
Thuật toán (Tham lam + Tiền tố)
- Sắp xếp A,B,C giảm dần.
- Lấy
pxe đỏ đắt nhất từ A,qxe xanh đắt nhất từ B → gộp vào mảngdp, sắp xếp giảm dần. - Tính tiền tố
dp[i]= tổngixe tốt nhất hiện có. - Thử thay thế
ixe (1..min(c,p+q)) bằngixe trắng đắt nhất:res = max(res, dp[p+q-i] + sum(C[0..i-1])).
Đoạn mã C++
#include <bits/stdc++.h>
using namespace std;
int solve(int p,int q,int a,int b,int c,
vector<int> A,vector<int> B,vector<int> C) {
vector<int> dp(1,0);
sort(A.rbegin(),A.rend());
sort(B.rbegin(),B.rend());
sort(C.rbegin(),C.rend());
for(int i=0;i
Đầu vào / Đầu ra
Input: 3,3,3,3,2,{150000,200000,200000},{150000,120000,180000},{210000,160000,150000}
Output: 1100000