Yogurt factory 机器工厂

本文介绍了如何运用贪心算法解决USACO05MAR中的Yogurt factory问题,该问题涉及在不断变化的原材料成本和劳动力价格下,计算完成订单的最小代价。通过维护每周最小花费的f[i],并考虑保养和生产成本,可以得出全局最优解。
摘要由CSDN通过智能技术生成

第一篇 2021-10-26[USACO05MAR]Yogurt factory 机器工厂 - 洛谷icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1376

目录

题目描述

输入格式

输出格式

思路

AC代码


题目描述

小 T 开办了一家机器工厂,在 N个星期内,原材料成本和劳动力价格不断起伏,第 i 周生产一台机器需要花费 Ci​ 元。若没把机器卖出去,每保养一台机器,每周需要花费 S 元,这个费用不会发生变化。

机器工厂接到订单,在第 ii 周需要交付Yi​ 台机器给委托人,第 i 周刚生产的机器,或者之前的存货,都可以进行交付。

请你计算出这 n 周时间内完成订单的最小代价。

输入格式

第一行输入两个整数 N 和 S,接下来 NN 行每行两个数Ci​ 和 Yi​。

输出格式

输出一个整数,表示最少的代价。

注意范围:1<=n<=10000,1<=Ci<=5000,1<=S<=100,0<=Yi<=10000.


思路

贪心算法,找到每周的最小花费。f[i]为第i周花费最小的交互方法,用第i-1周加上保养的花费和第i周生产的花费求最小的f[i]=min(f[i-1]+s,c[i])。

结果定义long long,防止超过int的范围。

(贪心:不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。)


AC代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;//定义long long,防止爆int
ll n,s;
ll c[10010],y[10010];//存储费用和交互数量
ll f[10010];
ll sum=0;
int main(){
    scanf("%lld%lld",&n,&s);
    for(int i=1;i<=n;i++){
        scanf("%lld%lld",&c[i],&y[i]);
    }
    for(int i=1;i<=n;i++){
        if(i==1){
            f[i]=c[i];
        }
        else{
            f[i]=min(c[i],f[i-1]+s);
        }
        sum=sum+f[i]*y[i];
    }
    printf("%lld",sum);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值