P1376 [USACO05MAR] Yogurt factory 机器工厂
https://www.luogu.com.cn/problem/P1376
题目描述
小 T 开办了一家机器工厂,在 N N N 个星期内,原材料成本和劳动力价格不断起伏,第 i i i 周生产一台机器需要花费 C i C_i Ci 元。若没把机器卖出去,每保养一台机器,每周需要花费 S S S 元,这个费用不会发生变化。
机器工厂接到订单,在第 i i i 周需要交付 Y i Y_i Yi 台机器给委托人,第 i i i 周刚生产的机器,或者之前的存货,都可以进行交付。
请你计算出这 n n n 周时间内完成订单的最小代价。
输入格式
第一行输入两个整数 N N N 和 S S S,接下来 N N N 行每行两个数 C i C_i Ci 和 Y i Y_i Yi。
输出格式
输出一个整数,表示最少的代价。
输入输出样例 #1
输入 #1
4 5
88 200
89 400
97 300
91 500
输出 #1
126900
说明/提示
对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 4 1 \le n\le 10^4 1≤n≤104, 1 ≤ C i ≤ 5000 1 \le C_i \le 5000 1≤Ci≤5000, 1 ≤ S ≤ 100 1 \le S \le 100 1≤S≤100, 0 ≤ Y i ≤ 1 0 4 0 \le Y_i \le 10^4 0≤Yi≤104。
题解
这题需要注意不开long的话只能拿90分。不开long两行泪啊!!!
典型的贪心算法,两个for循环搞定~
cpp
#include<iostream>
using namespace std;
int main(){
long week_num,save,c_i,y_i,sum=0,min;
long cost_list[100000];
cin >> week_num >> save;
for(int i=0;i<week_num;i++){
cin >> c_i >> y_i;
cost_list[i]=c_i; // 如果在第i周生产,所需要的费用
min=c_i;
for(int j=0;j<i;j++){
int cost_j=cost_list[j]+(i-j)*save; // 如果在第j周生产,所需要的费用
if(cost_j<min){
min=cost_j;
}
}
sum+=min*y_i;
}
cout<<sum;
return 0;
}
走过路过别错过,留个关注留个赞~