模拟一下仓库里面存储物品的价格情况即可,如果当前物品大于仓库里面物品那么就替换一下仓库里的物品,然后订货直接从仓库里先取,仓库里不够则直接购买,每次做完后记得买当前物品填补一下仓库直至仓库填满,当然这笔钱等物品从仓库里取出时在付。复杂度O(nmlog(m))
代码
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = ;
int n,m,S,i,j,e[N],d[N],u[N],ans;
int main()
{
scanf("%d%d%d",&n,&m,&S);
for (i=;i<=n;i++)
scanf("%d",&u[i]);
for (i=;i<=n;i++)
scanf("%d",&d[i]);
for (j=;j<=S;j++) e[j]=0x37373737;
for (i=;i<=n;i++)
{
for (j=;j<=S;j++)
if (d[i]<e[j]) e[j]=d[i];
sort(e+,e++S);
for (j=;j<=min(S,u[i]);j++)
ans+=e[j],e[j]=d[i];
ans+=d[i]*(u[i]-min(S,u[i]));
for (j=;j<=S;j++) e[j]+=m;
}
printf("%d\n",ans);
}