比较简单的dp:第n+1周的订单的最小花费是min(第一周做出来保存,第二周做出来保存。。。第n+1周直接制作)
由此可以得出dp[n+1]=min(dp[n]+s,dp[n+1])。
这里dp的意义是找出在n+1周之前在哪一周生产费用最低。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int c[10005],y[10005];
int main ()
{
int n,s;
cin >> n >> s;
for(int i=0;i<n;i++)
{
scanf("%d%d",&c[i],&y[i]);
}
for(int i=1;i<n;i++)
{
c[i]=min(c[i-1]+s,c[i]);
}
long long sum =0 ;
for(int i=0;i<n;i++)
{
sum+=c[i]*y[i];
}
cout << sum << endl;
}