POJ2393贪心

题意:奶牛们收购了一家世界著名的酸奶工厂Yucky Yogurt. 在接下来的 N (1 <= N <= 10,000) 周,牛奶和人工的价格每周会波动,以致于第i周需要花公司 C_i (1 <= C_i <= 5,000) 美分来生产一个单位的酸奶. 
Yucky Yogurt 拥有一个仓库,可以以S (1 <= S <= 100)美分每单位每周的价格储存没用的酸奶。酸奶不会变质,而且仓库足够大。
Yucky Yogurt每周要交货 Y_i (0 <= Y_i <= 10,000) 单位的酸奶给它的客户。输出最少的费用。

题解:每次都取局部最优解,然后将所有的最小值相加,就是整体的最小值。

贪心思路:利用dp得到每周的最小值,dp[i]为第i周的最小值,因为最小值的来源是min(dp[i-1]+S,C[i])

为什么不可能是C[i-2]+2S:因为dp[i-1]<=C[i-2]+S,所以dp[i]<=dp[i-1]+S<=C[i-2]+2S,其余情况同理排除


#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
ll C[10500], Y[10500];
ll dp[10500];
int main(void)
{
    ios::sync_with_stdio(false);
    int N, S;
    cin >> N >> S;
    for (int i = 1; i <= N; i++)
        cin >> C[i] >> Y[i]; 
    dp[1] = C[1];
    ll sum = dp[1]*Y[1];
    for (int i = 2; i <= N; i++)
    {
        dp[i] = min(C[i], dp[i - 1] + S);
        sum += dp[i] * Y[i];
    }
    cout << sum << endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ZJNU-huyh/p/13210092.html