int dfs(int l,int r){
if(score[l][r])return score[l][r];
//直接返回已经记录的值来节省时间
if(l==r){ node[l][r]=l; return v[l]; }
int max=0;
for(int k=l;k<=r;k++){
//枚举每个点,若选出的点max,则子点也必须max,最后实际上是先处理子点再返回的
t =dfs(l,k-1)*dfs(k+1,r)+v[k];
if(t>max){max=t; node[l][r]=k;
}
}
return score[l][r]=max; //新学的
}