题意:一个酸奶公司有n周的生产计划,在第I周每生产一单位需要c_i成本,需要向客户交货y_i单位,公司有一个无穷大的仓库,并且酸奶可以存储任意时间不会腐化。没存一周一单位的酸奶需要s成本。问怎样安排生产与存储,使得n周的成本最小
网上的思路:总是使得当前周数生产成本最小,用for循环维护。
#include<cstdio>
#include<iostream>
#include<algorithm>
#define Min(a,b) a<b?a:b
const int N = 10010;
int c[N],d[N];
int main()
{
int n,s;
long long ans=0;
scanf("%d%d",&n,&s);
for(int i=0;i<n;i++)
scanf("%d%d",&c[i],&d[i]);
for(int i=1;i<n;i++)
c[i]=Min(c[i],c[i-1]+s);
for(int i=0;i<n;i++)
ans+=c[i]*d[i];
printf("%lld",ans);
}
我的错误代码:不明白错在哪
#include<cstdio>
#include<iostream>
#include<algorithm>
#define Min(a,b) a<b?a:b
using namespace std;
const int N = 10010;
struct node
{
int c;
int d;
}data[N];
int main()
{
int n,s;
long long ans=0,min=0;
scanf("%d%d",&n,&s);
for(int i=0;i<n;i++)
{
scanf("%d%d",&data[i].c,&data[i].d);
}
ans+=data[0].c*data[0].d;
for(int i=1;i<n;i++)//从第二周开始考虑
{
min = data[i].c*data[i].d;
for(int j=0;j<i;j++)
{
long long value=data[j].c*data[i].d+data[i].d*(i-j)*s;
min=Min(min,value);
}
ans+=min;
}
printf("%lld",ans);
}