1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include <iostream> using namespace std;
int max(int a, int b) { return a > b ? a : b; }
int Memorized_Cut_Rod_Aux(int p[], int n, int r[]) { if (r[n] >= 0) return r[n]; int profit = 0; if (n == 0) profit = 0; else { profit = -1; for (int i = 1; i <= n; i++) profit = max(profit, p[i] + Memorized_Cut_Rod_Aux(p, n - i, r)); } r[n] = profit; return r[n]; }
int Bottom_Up_Rod(int p[], int n) { int r[n]; memset(r, 0, sizeof(r)); for (int j = 1; j <= n; j++) { int profit = -1; for (int i = 1; i <= j; i++) profit = max(profit, p[i] + p[j - i]); r[j] = profit; } return r[n]; }
int main() { int p[11] = {0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30}; int r[50]; memset(r, -1, sizeof(r)); cout << Memorized_Cut_Rod_Aux(p, 10, r) << endl; cout << Bottom_Up_Rod(p, 10) << endl; return 0; }
|