奶牛们建了一家酸奶厂,在N周内每周需要出货Y_i单位酸奶,第i周成本为C_i,储存费为每周S。求总体最低成本。
贪心策略是维持每周的最低单位成本,每周可能用上周剩下的,也可能生产新的。于是该周单位成本可能为上一周的单位成本加上储存费,也可能为该周的单位成本。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<math.h> 7 #include<algorithm> 8 #include<queue> 9 #include<set> 10 #include<bitset> 11 #include<map> 12 #include<vector> 13 #include<stdlib.h> 14 #include <stack> 15 using namespace std; 16 #define PI acos(-1.0) 17 #define max(a,b) (a) > (b) ? (a) : (b) 18 #define min(a,b) (a) < (b) ? (a) : (b) 19 #define ll long long 20 #define eps 1e-10 21 #define MOD 1000000007 22 #define N 10006 23 #define inf 1e12 24 int n,s; 25 int c[N],y[N]; 26 int main() 27 { 28 while(scanf("%d%d",&n,&s)==2){ 29 for(int i=0;i<n;i++){ 30 scanf("%d%d",&c[i],&y[i]); 31 } 32 ll ans=0; 33 for(int i=1;i<n;i++){ 34 c[i]=min(c[i-1]+s,c[i]); 35 } 36 for(int i=0;i<n;i++){ 37 ans+=c[i]*y[i]; 38 } 39 printf("%I64d\n",ans); 40 } 41 return 0; 42 }