对于每周的货物,讨论他之前的星期,如果提前生产费用就是c[i] + (j-i) * s, 会TLE,所以要进行剪枝
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
long long n, s, ans;
const int MAXN = 10000 + 10;
long long c[MAXN], y[MAXN], vis[MAXN];
int main()
{
cin >> n >> s;
for(int i = 1; i <= n; i++)
cin >> c[i] >> y[i];
for(int i = 2; i <= n; i++)
for(int j = i-1; j >= 1; j--)
{
if((c[j] + (i-j) * s) < c[i]) c[i] = c[j] + (i-j) * s;
if(vis[j]) break;
else vis[j] = 1;
}
for(int i = 1; i <= n; i++)
ans += y[i] * c[i];
cout << ans;
return 0;
}