P2365 任务安排
费用提前计算。
我们可以不记录当前是第多少段,而是转化为每分一段就会给后面的所有工作增加一个常数的时间,提前计算这一部分代价即可。
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define orz cout<<"lytcltcltcltcltcltcl"<<endl
inline int r(){int s=0,k=1;char c=getchar();while(!isdigit(c)){if(c=='-')k=-1;c=getchar();}while(isdigit(c)){s=s*10+c-'0';c=getchar();}return s*k;}
int n,s,t[1000001],d[1000001],st[1000001],sd[1000001],f[1000001];
signed main()
{
n=r();s=r();
for(int i=1;i<=n;i++)
{
t[i]=r();d[i]=r();
st[i]=st[i-1]+t[i];
sd[i]=sd[i-1]+d[i];
}
memset(f,0x3f,sizeof(f));
f[0]=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<i;j++)
{
f[i]=min(f[i],f[j]+st[i]*(sd[i]-sd[j])+s*(sd[n]-sd[j]));
}
}
cout<<f[n];
}
本文来自博客园,作者:lei_yu,转载请注明原文链接:https://www.cnblogs.com/lytql/p/15426130.html