有一家生产酸奶的公司,连续n周,每周需要出货numi的单位,已经知道每一周生产单位酸奶的价格ci,并且,酸奶可以提前生产,但是存储费用是一周一单位s费用,问最少的花费。
对于要出货的酸奶,要不这一周生产,要不提前生产。
什么时候采用什么生产方式呢?
若第i周的货提前生产的话,假设在j周生产,则费用为(i-j)*s+c[j]
若c[i]>(i-j)*s+c[j],则更新c[i]=(i-j)*s+c[j]
更新要O(n^2)?
可以证明,最优的生产方式是,要不在这一周生产,要不在上一周生产(这里的上一周的c已经是更新过的)
O(n)更新数组c即可。
1 #include<cstdio> 2 #include<cstring> 3 4 using namespace std; 5 6 const int maxn=1e4+5; 7 #define LL long long 8 9 int c[maxn]; 10 int num[maxn]; 11 12 int main() 13 { 14 int n,s; 15 while(~scanf("%d%d",&n,&s)) 16 { 17 for(int i=1;i<=n;i++) 18 scanf("%d%d",&c[i],&num[i]); 19 20 for(int i=2;i<=n;i++) 21 { 22 if(s+c[i-1]<c[i]) 23 c[i]=s+c[i-1]; 24 } 25 LL ans=0; 26 for(int i=1;i<=n;i++) 27 { 28 ans+=(LL)c[i]*num[i]; 29 } 30 printf("%lld\n",ans); 31 } 32 return 0; 33 }
时间: 2024-12-23 20:27:35