貪心問題

描述

假設你所在的公司有 n 個職位,編號從 1n,編號越高對應的報酬越高,假設你是個新人,目前還在職位 1,每一天你都可以選擇在目前的職位上打工獲得對映報酬,或是花費一定量的錢接受下一個職位的培訓,培訓只需一天,第二天即可升職,但是不可以跨職位培訓。給出 n 個職位每天報酬 A \{ a_1,a_2,...,a_n\} 和 培訓費用 B \{ b_1,b_2,...,b_{n-1}\},b_i 表示從 a_ia_{i+1}的培訓費用?,F(xiàn)在你想通過工作買一臺價值 c 的計算機,求最少的工作天數(shù)。

分析

這一題是典型的貪心問題,是我的薄弱項,今天也是掙扎了10幾分鐘沒有好的思路就看題解了。說一下題解的思路,我們最終肯定是要依靠一個職位來攢錢,所以可以分為 n 種情況,而一旦確定了最終的職位,那么所需要攢的錢就是固定的(培訓費用加上計算機費用)。又因為職位報酬數(shù)組是遞增的,所以越早升職攢錢越快,前面的錢全部充當培訓費用一定是最優(yōu)的。分別計算 n 個職位下所需工作天數(shù),選取其中最小的即可。

代碼

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int main() {
    int t; cin >> t;
    int n, c;
    while(t--) {
        cin >> n >> c;
        int a[n], b[n-1];
        for(int& x: a) cin >> x;
        for(int& x: b) cin >> x;

        ll ans = (c+a[0]-1) / a[0]; // pos0
        ll cur = 0, bal = 0;
        for(int i = 1; i < n; i++) {  // pos1 ~ pos(n-1)
            ll workDays = b[i-1] > bal ? (b[i-1] - bal + a[i-1] - 1) / a[i-1] : 0ll;
            cur += (workDays + 1);  // 還有一天用于升職

            if(cur > ans) break;
            bal += (a[i-1] * workDays - b[i-1]);

            ll workDays2 = c > bal ? (c- bal + a[i] - 1) / a[i] : 0ll;
            ans = min(ans, cur+workDays2);
        }

        cout << ans << '\n';
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.POJ 2376 DescriptionFarmer John is assigning some of hi...
    恰似一碗咸魚粥閱讀 307評論 0 0
  • 題目:給定一堆會議的起始時間和結(jié)束時間,求最多能夠參加的會議數(shù)目。思路:貪心策略有三種:選最早開始的會議(會議可能...
    乘瓠散人閱讀 493評論 0 0
  • 貪心一般就是按照某種貪心規(guī)則排序好之后從最貪心的方式開始選擇,某種貪心規(guī)則一般用sort一起使用,以下是喝飲料的例子:
    CristianoC閱讀 106評論 0 0
  • HR必知的九大效益計量公式 1人事費用率人事費用率指人力成本占銷售額比重。該指標反應了人力成本的投入產(chǎn)出比,計算的...
    濤聲依舊在在閱讀 6,965評論 0 5
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    余生動聽閱讀 10,885評論 0 11

友情鏈接更多精彩內(nèi)容