题意:
一家工厂每个周可以生产无数的酸奶,每周单位酸奶的价格不相同。
有一个无限大的仓库可以存储这些酸奶,可以储存无限久,储存每单位酸奶的价格相同。
每周要向客户供应一定量的酸奶,这些酸奶可以是本周生产的,也可以是以前存储的。
要求把花费最小化。
思路:
由于每周的酸奶可以来自前面任何一个周的生产,所以可以枚举前面每个周的生产价格,加上保存到这周需要的花费,与这个周生产的价格进行比较,小的作为生产价格。
代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 6 const int N = 1e4 + 5; 7 const int inf = 0x3f3f3f3f; 8 9 long long c[N],y[N]; 10 11 int main() 12 { 13 int n,s; 14 15 while (scanf("%d%d",&n,&s) != EOF) 16 { 17 long long ans = 0; 18 19 for (int i = 0;i < n;i++) 20 { 21 scanf("%lld%lld",&c[i],&y[i]); 22 } 23 24 for (int i = 0;i < n;i++) 25 { 26 long long minn = inf; 27 28 for (int j = 0;j < i;j++) 29 { 30 minn = min(minn,s * (i - j) + c[j]); 31 } 32 33 minn = min(minn,c[i]); 34 35 ans += minn * y[i]; 36 } 37 38 printf("%lld ",ans); 39 } 40 41 return 0; 42 }