POJ 2393题目大意如下:
这是一个费用问题,实际背景是生产酸奶,工程分为N周,指定每周存储酸奶的费用为S,给出每周的单位酸奶制造成本以及客户需求量,要求给出最佳的生产方案,使得总的花费最少。
可以使用一个二维数组,分别存储原定该周的酸奶制造成本,以及涮选后的酸奶制造成本,关于涮选后的酸奶制造成本可以这样涮选:与前一周的新的制造成本做比较
if (exp[i][0] > exp[i - 1][1] + S) { exp[i][1] = temp; } else exp[i][1] = exp[i][0];
第i周和第k周: 比较成本: exp[i][0] + (k - i)*S < exp[k][0];
#include <iostream> #include <algorithm> #include <cstdio> #include <queue> using namespace std; const int maxn = 10000; int exp[maxn + 1][2]; int dem[maxn + 1]; int N, S; void solve() { int i = 1; unsigned long long sum = exp[0][0]*dem[0]; exp[0][1] = exp[0][0]; while (i < N) { int temp = exp[i - 1][1] + S; if (exp[i][0] > exp[i - 1][1] + S) { exp[i][1] = temp; } else exp[i][1] = exp[i][0]; sum += exp[i][1]*dem[i]; i++; } printf("%llu\n", sum); } int main(int argc, const char * argv[]) { // insert code here... scanf("%d %d", &N, &S); for (int i = 0; i < N; i++) { scanf("%d %d", &exp[i][0], &dem[i]); } solve(); return 0; }