知识点:贪心,
这道题有点递推的味道,我们在计算的过程中记录当前星期价格的最小值,那么它的值就应该为上一个星期的最小值加上保养费与这个星期直接造里面的最小值,当前的最小值只是有可能影响后面,不会影响前面,因为第几个星期的货物最晚是要那个星期交,
#include#define fi first #define se second #define pb push_back #define mk make_pair #define sz(x) ((int) (x).size()) #define all(x) (x).begin(), (x).end() using namespace std; typedef long long ll; typedef vector vi; typedef pair pa; const int N = 1e4 + 5; pa p[N]; int main() { int n, s; cin >> n >> s; for (int i = 0; i < n; i++) cin >> p[i].fi >> p[i].se; ll ans = 0; int Min = p[0].fi; for (int i = 0; i < n; i++) { Min = min(Min + s, p[i].fi); ans += Min * p[i].se; } cout << ans; return 0; }


![P1376 [USACO05MAR]Yogurt factory 机器工厂 P1376 [USACO05MAR]Yogurt factory 机器工厂](http://www.mshxw.com/aiimages/31/722293.png)
