回復 1# may - #include <bits/stdc++.h>
- #define int long long
- using namespace std;
- signed main(){
- int Px, Py, Cx, Cy, Sx, Sy, Hx, Hy, total = 0, Nx, Ny;
- cin >> Px >> Py >> Cx >> Cy >> Sx >> Sy >> Hx >> Hy;
- if(Px > Cx) {
- total += (Px-Cx)*Sx;
- Nx = Sx;
- }
- else {
- total += (Px-Cx)*Hx;
- Nx = Hx;
- }
- if(Py > Cy) {
- total += (Py-Cy)*Sy;
- Ny = Sy;
- }
- else {
- total += (Py-Cy)*Hy;
- Ny = Hy;
- }
- cout << total << endl << Nx << ' ' << Ny << endl;
- return 0;
- }
複製代碼 ----------------------------------------
解析:
讀取輸入:
依序讀取售價、銷貨成本、庫存量、最低銷售量。
確定最佳銷售數量:
根據題目條件,每種產品應該儘可能地賣完,因此 X 和 Y 直接取 Sx 和 Sy(倉庫內最多可賣的量)。
計算利潤:
用公式計算淨利潤 (Px - Cx) * X + (Py - Cy) * Y。
輸出結果:
輸出最大淨利潤值。
輸出最佳銷售數量
X 和 Y。
時間與空間複雜度:
時間複雜度:
O(1)(常數時間計算)
空間複雜度:
O(1)(僅使用幾個變數
----------------------------------------------------------------
測資:
測資 00(基礎測試)
輸入:
100 150
40 80
10 15
5 10
輸出:
1700
10 15
說明:
甲的淨利潤為
(100−40)×10=600
乙的淨利潤為
(150−80)×15=1100
總獲利為 1700,最佳銷售數量為
(10,15)
測資 01(庫存量與最低銷售量相等)
輸入:
120 180
50 70
8 12
8 12
輸出:
1880
8 12
說明:
甲的淨利潤為
(120−50)×8=560
乙的淨利潤為
(180−70)×12=1320
總獲利為 1880,但因為倉庫內最多只能賣 8 和 12,所以這是最佳解。
測資 02
輸入:
200 300
100 150
10 10
5 5
輸出:
2500
10 10
說明:
甲的淨利潤為
(200−100)×10=1000
乙的淨利潤為
(300−150)×10=1500
1000+1500=2500
輸出應該要賣出所有庫存來獲得最大利潤,
2500
10 10
測資03(銷貨成本較高)
輸入:
500 700
400 600
20 30
10 15
輸出:
5000
20 30
說明:
甲的淨利潤為
(500−400)×20=2000
乙的淨利潤為
(700−600)×30=3000
總獲利為 5000。
測資 04(不同售價與成本組合)
輸入:
50 120
20 90
25 40
10 20
輸出:
2400
25 40
說明:
甲的淨利潤為
(50−20)×25=750
乙的淨利潤為
(120−90)×40=1200
總獲利為 1950。
這 5 筆測資涵蓋了:
基本情況
最低銷售量剛好等於庫存
只賣最低數量
高銷貨成本情境
不同的售價與成本組合 |