BZOJ 1680 [Usaco2005 Mar]Yogurt factory:贪心【只用考虑上一个】

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1680

题意:

  在接下来的n周内,第i周生产一吨酸奶的成本为c[i],订单为y[i]吨酸奶。

  酸奶可以提前生产,可以存放无限长的时间,存放一周的花费为s。

  问你在完成所有订单的前提下,最小的花费为多少。

 

题解:

  贪心。

  p[i]代表第i周的最小成本。

  对于p[i],只用考虑p[i-1],因为已经保证了p[i-1]是i-1之前所有周的最优答案。

  所以转移为:p[i] = min(c[i], p[i-1]+s)。

  最小花费 = ∑ p[i]*y[i]。

 

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define MAX_N 10005
 5 #define INF 10000000
 6 
 7 using namespace std;
 8 
 9 int n,s;
10 int c[MAX_N];
11 int y[MAX_N];
12 int p[MAX_N];
13 long long ans=0;
14 
15 void read()
16 {
17     cin>>n>>s;
18     for(int i=1;i<=n;i++)
19     {
20         cin>>c[i]>>y[i];
21     }
22 }
23 
24 void solve()
25 {
26     p[0]=INF;
27     for(int i=1;i<=n;i++)
28     {
29         p[i]=min(c[i],p[i-1]+s);
30         ans+=p[i]*y[i];
31     }
32 }
33 
34 void print()
35 {
36     cout<<ans<<endl;
37 }
38 
39 int main()
40 {
41     read();
42     solve();
43     print();
44 }

 

posted @ 2017-10-07 10:26  Leohh  阅读(200)  评论(0编辑  收藏  举报