是因为map查找不如数组随机存取快的缘故吗
#include<iostream>
#include<map>
using namespace std;
typedef pair<pair<int, int>, int> piii;
map<piii, int> m;
piii t;
int w(int a, int b, int c) {
t = make_pair(make_pair(a, b), c);
if (m.find(t)!=m.end()) {
return m[t];
}
if (a <= 0 || b <= 0 || c <= 0) {
m[make_pair(make_pair(a, b), c) ] = 1;
return 1;
}
if (a > 20 || b > 20 || c > 20) {
m[make_pair(make_pair(a, b), c)]= w(20, 20, 20);
return w(20, 20, 20);
}
if (a < b && b < c) {
m[make_pair(make_pair(a, b), c)]= w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
return w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
}
m[make_pair(make_pair(a, b), c)]= w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
return w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
}
int main() {
int a, b, c;
while (1) {
cin >> a >> b >> c;
if (a == -1 && b == -1 && c == -1) {
break;
}
cout<<"w(" << a<<", "<<b<<", "<<c<<")"<<" = "<<w(a, b, c) << endl;
}
return 0;
}