保存已经求得的子问题解
自底向上
#ifndef _MODEL_
#define _MODEL_
#include<vector>
#include<map>
using std::vector;
using std::map;
int max(int a1, int a2) {
if (a1 >= a2)
return a1;
else
return a2;
}
int function(int length, map<int, int>data) {
vector<int> VecMax;
int Max=0;
for (int i = 1; i <= length; i++) {
if (i == 1) {
VecMax.push_back(data[1]);
continue;
}
for (int q = 1; q < i; q++) {
if (max(data[i], data[q]+VecMax[i - q - 1]) >= Max)
Max = max(data[i], data[q]+VecMax[i - q - 1]);
}
VecMax.push_back(Max);
Max = 0;
}
return VecMax[length - 1];
}
#endif // !_MODEL_
test
#include<iostream>
#include<map>
#include"model.h"
using std::map;
using std::cout;
using std::cin;
int main() {
map<int, int>data = { {1,1},{2,5},{3,8},{4,9},{5,10},{6,17},{7,17},{8,20},{9,24},{10,30} };
int length = 10;
cout << function(length, data);
system("pause");
}