首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDU 5310 Souvenir:最小購買成本數學建模

     編輯:關於C++

問題建模

需要購買 n 件商品,單價 p,套裝 m 件價格 q。求最小總花費。只有三種購買策略:

  1. 全單買:`cost1 = n * p`
  2. 全套裝:`cost2 = ceil(n/m) * q`
  3. 混合買:`cost3 = (n/m) * q + (n%m) * p`

關鍵洞察

不需要考慮「先買單件再買套裝」,因為如果單件更劃算,直接全單買即可;如果套裝更劃算,優先買套裝再補單件。

AC 代碼

int main() {
    int T, n, m, p, q;
    scanf("%d", &T);
    while (T--) {
        scanf("%d%d%d%d", &n, &m, &p, &q);
        int ans1 = n * p;
        int ans2 = (n % m == 0) ? (n/m) * q : (n/m + 1) * q;
        int ans3 = (n/m) * q + (n%m) * p;
        printf("%d\n", min(ans1, min(ans2, ans3)));
    }
    return 0;
}

錯誤反思

WA 兩次原因:未考慮 `n % m == 0` 時套裝數計算邊界,且輸出格式多印空格。細節決定成敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved