还有能不能帮我改成哈希的版本?
#include<bits/stdc++.h>
#define int long long
#define PII pair<int,int>
#define fi first
#define se second
using namespace std;
const int mod=1e9+7;
int n,m,a[9],b[9],ans;
vector<PII>p;
map<vector<int>,int>mp;
void dfs1(int u){
if(u>m/2){
vector<int>cnt;
for(int i=1;i<=n;i++) cnt.push_back(b[i]);
mp[cnt]++;
return;
}
int x=p[u].fi,y=p[u].se;
if(b[x]+3<=a[x]) b[x]+=3,dfs1(u+1),b[x]-=3;
if(b[y]+3<=a[y]) b[y]+=3,dfs1(u+1),b[y]-=3;
if(b[x]+1<=a[x]&&b[y]+1<=a[y]) b[x]++,b[y]++,dfs1(u+1),b[x]--,b[y]--;
}
void dfs2(int u){
if(u>m-1){
vector<int>cnt;
for(int i=1;i<=n;i++) cnt.push_back(a[i]-b[i]);
if(mp[cnt]) ans+=mp[cnt];
return;
}
int x=p[u].fi,y=p[u].se;
if(b[x]+3<=a[x]) b[x]+=3,dfs1(u+1),b[x]-=3;
if(b[y]+3<=a[y]) b[y]+=3,dfs1(u+1),b[y]-=3;
if(b[x]+1<=a[x]&&b[y]+1<=a[y]) b[x]++,b[y]++,dfs1(u+1),b[x]--,b[y]--;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++) p.push_back({i,j});
}
m=n*(n-1)/2;
dfs1(0);
dfs2(m/2+1);
cout<<ans;
}