[NOIP][C++]洛谷P1376 [USACO05MAR] Yogurt factory 机器工厂
P1376 [USACO05MAR] Yogurt factory 机器工厂
https://www.luogu.com.cn/problem/P1376
题目描述
小 T 开办了一家机器工厂,在 NNN 个星期内,原材料成本和劳动力价格不断起伏,第 iii 周生产一台机器需要花费 CiC_iCi 元。若没把机器卖出去,每保养一台机器,每周需要花费 SSS 元,这个费用不会发生变化。
机器工厂接到订单,在第 iii 周需要交付 YiY_iYi 台机器给委托人,第 iii 周刚生产的机器,或者之前的存货,都可以进行交付。
请你计算出这 nnn 周时间内完成订单的最小代价。
输入格式
第一行输入两个整数 NNN 和 SSS,接下来 NNN 行每行两个数 CiC_iCi 和 YiY_iYi。
输出格式
输出一个整数,表示最少的代价。
输入输出样例 #1
输入 #1
4 5
88 200
89 400
97 300
91 500
输出 #1
126900
说明/提示
对于 100%100\%100% 的数据,1≤n≤1041 \le n\le 10^41≤n≤104,1≤Ci≤50001 \le C_i \le 50001≤Ci≤5000,1≤S≤1001 \le S \le 1001≤S≤100,0≤Yi≤1040 \le Y_i \le 10^40≤Yi≤104。
题解
这题需要注意不开long的话只能拿90分。不开long两行泪啊!!!
典型的贪心算法,两个for循环搞定~
#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;
}
走过路过别错过,留个关注留个赞~