@ZCDHJ
2018-08-30T16:37:51.000000Z
字数 660
阅读 1609
贪心 Dp
可以看出,每周的牛奶要么全是本周产出的,要么全是之前某周生产的。而且生产的那周一定是由单调性的,也就是不会一下子第 周生产最优后面又变成 周最优。
那么跑一个 DP ,大概就是设 为第 周时 “获得” 一单位牛奶的最低价格。那么 ,每次再用这个值乘 Y 。前面那个性质就保证了这个 DP 是有最优子结构的。
#include <iostream>#include <cstdio>#define int long longconst int MAXN = 10000 + 5;int N, S, Ans;int C[MAXN], Y[MAXN], Dp[MAXN];inline int read(){register int x = 0;register char ch = getchar();while(!isdigit(ch)) ch = getchar();while(isdigit(ch)){x = x * 10 + ch - '0';ch = getchar();}return x;}signed main(){N = read();S = read();for(int i = 1; i <= N; ++i){C[i] = read();Y[i] = read();}Dp[1] = C[1];Ans = C[1] * Y[1];for(int i = 2; i <= N; ++i){Dp[i] = std::min(Dp[i - 1] + S, C[i]);Ans += Dp[i] * Y[i];}printf("%lld\n", Ans);return 0;}
