POJ 2393 贪心 简单题

有一家生产酸奶的公司,连续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
",ans);
31     }
32     return 0;
33 }
View Code
原文地址:https://www.cnblogs.com/-maybe/p/4696691.html