VIJOS-1312 矩阵连乘问题_疯子的小屋_百度空间

#include<iostream>
using namespace std;

int N , head[ 102 ] , tail[ 102 ];
long long dp[ 102 ][ 102 ];

int main() {
    cin >> N;
    int i , j;
    for( i = 1 ; i <= N ; i ++ ) cin >> head[ i ];
    for( i = 1 ; i < N ; i ++ ) tail[ i ] = head[ i + 1 ];
    tail[ N ] = head[ 1 ];
    int step;
    for( i = 1 ; i <= N ; i ++ ) dp[ i ][ 0 ] = 0;
    for( step = 1 ; step < N ; step ++ ) {
        for( i = 1 ; i <= N ; i ++ ) {
            int t3 = i + step - 1;
            int t4 = i + step;
            if( t4 > N ) t4 = t4 - N;
            if( t3 > N ) t3 = t3 - N;
            dp[ i ][ step ] = dp[ i ][ step - 1 ] + head[ i ] * tail[ t3 ] * tail[ t4 ];
            for( j = 0 ; j < step ; j ++ ) {
                int t1 = i + j + ;
                int t2 = i + step;
                int t5 = i + j + 1;
                if( t1 > N ) t1 = t1 - N;
                if( t2 > N ) t2 = t2 - N;
                if( t5 > N ) t5 = t5 - N;
                if( dp[ i ][ step ] < dp[ i ][ j ] + dp[ t5 ][ step - j - 1 ] + head[ i ] * tail[ t1 ] * tail[ t2 ] ) {
                    dp[ i ][ step ] = dp[ i ][ j ] + dp[ t5 ][ step - j - 1 ] + head[ i ] * tail[ t1 ] * tail[ t2 ];
                }
            }
        }
    }
    long long result = 0;
    for( i = 1 ; i <= N ; i ++ ) {
        if( dp[ i ][ N - 1 ] > result ) result = dp[ i ][ N - 1 ];
    }
    cout << result << endl;
}



郑重声明:资讯 【VIJOS-1312 矩阵连乘问题_疯子的小屋_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——