[关闭]
@ZCDHJ 2018-08-30T16:37:51.000000Z 字数 660 阅读 1523

POJ2393 Yogurt factory

贪心 Dp


Vjudge

可以看出,每周的牛奶要么全是本周产出的,要么全是之前某周生产的。而且生产的那周一定是由单调性的,也就是不会一下子第 周生产最优后面又变成 周最优。

那么跑一个 DP ,大概就是设 为第 周时 “获得” 一单位牛奶的最低价格。那么 ,每次再用这个值乘 Y 。前面那个性质就保证了这个 DP 是有最优子结构的。

  1. #include <iostream>
  2. #include <cstdio>
  3. #define int long long
  4. const int MAXN = 10000 + 5;
  5. int N, S, Ans;
  6. int C[MAXN], Y[MAXN], Dp[MAXN];
  7. inline int read()
  8. {
  9. register int x = 0;
  10. register char ch = getchar();
  11. while(!isdigit(ch)) ch = getchar();
  12. while(isdigit(ch))
  13. {
  14. x = x * 10 + ch - '0';
  15. ch = getchar();
  16. }
  17. return x;
  18. }
  19. signed main()
  20. {
  21. N = read();
  22. S = read();
  23. for(int i = 1; i <= N; ++i)
  24. {
  25. C[i] = read();
  26. Y[i] = read();
  27. }
  28. Dp[1] = C[1];
  29. Ans = C[1] * Y[1];
  30. for(int i = 2; i <= N; ++i)
  31. {
  32. Dp[i] = std::min(Dp[i - 1] + S, C[i]);
  33. Ans += Dp[i] * Y[i];
  34. }
  35. printf("%lld\n", Ans);
  36. return 0;
  37. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注