最后两个点RE
查看原帖
最后两个点RE
345837
空木秋人楼主2021/9/28 22:10

用记忆话搜索做的,想不通为啥最后两个点会报错。我把一个数据下到本地跑报segment fault。

#define rep(i, a, n) for (long long i = a; i < n; ++i)
#define per(i, n, a) for (long long i = n - 1; i >= a; --i)

ll dp[105][105]={0};

// 存储每颗珠子的头部能量
int energy[205]={0};

ll dfs(int i,int j){
    if(dp[i][j]) return dp[i][j];
    if(i==j) return 0;
    rep(k, i, j){
        dp[i][j]=max(dp[i][j],dfs(i,k)+dfs(k+1,j)+energy[i]*energy[k+1]*energy[j+1]);
    }
    return dp[i][j];
}

int main(){
    //std::ios::sync_with_stdio(false);
    //std::cin.tie(0);
    //freopen("INPUT.TXT", "r", stdin);
    //freopen("OUTPUT.TXT", "w", stdout);
    ll ans=0;
    int N;
    cin>>N;
    rep(i, 0, N){
        cin>>energy[i];
        energy[N+i]=energy[i];  // 环展开成链
    }
    energy[2*N]=1;
    rep(i, 0, N){
        ans=max(ans,dfs(i,i+N-1));
    }
    cout<<ans;
    return 0;
}

数据如下:

70
23 35 102 83 455 102 33 145 102 23 45 302 3 15 102 113 115 102 3 35 102 3 45 102 3 55 112 3 5 102 3 385 202 93 5 102 3 85 102 3 5 102 3 15 102 13 5 102 3 5 102 3 85 102 3 5 102 3 5 102 3 5 102 3 17 112 13 5 102 23 

2021/9/28 22:10
加载中...