#include<iostream>
#include<vector>
#include<map>
using namespace std;
vector<int> vc{ 1,2,4,8,5,6,7 };
int n = 3;
int find(int count, int index) {
if (count == n)
return 0;
int min = 0;
for (int j = index + 2; j < vc.size() - (n - count - 1) * 2; j++) {
int t= vc[j] + find( count + 1,j);
if (min == 0 || t < min)
min = t;
}
return min;
}
int main() {
cout <<"暴力:"<< find(0, -2) << endl;
map<int, map<int, int>> dp; //出现了负坐标,用map直观一点,但效率不高,你可以自己进行一个坐标转换
for (int i = 1; i <= n; i++) {
for (int j = -2; j<0||j < vc.size(); j++) {
for (int k = j + 2; k < vc.size() - (i-1) * 2; k++) {
int m = vc[k] + dp[i-1][k];
if ((dp[i][j] == 0 || dp[i][j] > m))
dp[i][j] = m;
}
}
}
cout <<"DP:"<< dp[n][-2] << endl;
return 0;
}