320エネルギーのネックレスをAcWing

トピックリンク:こちらをクリックしてください
ここに画像を挿入説明
ここに画像を挿入説明

そして継続的に乗算のような行列です。

F [ L R ] F [L、R] 全て表します [ L R ] [L、R] 最大ビーズ(マトリックス)の方法で混合しました。

状態遷移方程式:

F [ L R ] = メートル A バツ F [ L K ] + F [ K R ] + ワット [ L ] * ワット [ K ] * ワット [ R ] F [L、R] = MAX(F [L、K] + F [K、R] + [L] * W [K] * [R] W W)

ヒント:スプリットリングとチェーンの長さがそれぞれ、倍、質問は、ライン上の隣接するビーズをマージなるコピー n個 + 1 N + 1 リング状の状況の間隔に相当します。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>

using namespace std;
const int N = 210;

int w[N];
int f[N][N];

int main()
{
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i)
    {
        scanf("%d", &w[i]);
        w[i + n] = w[i];
    }
    
    for(int len = 3; len <=  n + 1; len++)
    {
        for(int l = 1; l + len - 1 <= 2 * n; l++)
        {
            int r = l + len - 1;
            
            for(int k = l + 1; k < r; k++)
            {
                f[l][r] = max(f[l][r], f[l][k] + f[k][r] + w[l] * w[k] * w[r]);
            }
        }
    }
    
    int ans = 0;
    for(int i = 1; i <= n; ++i) ans = max(ans, f[i][i + n]);
    
    printf("%d\n", ans);
    
    return 0;
}
844元記事公開 ウォンの賞賛135 ビュー150,000 +を

おすすめ

転載: blog.csdn.net/qq_42815188/article/details/105022790
おすすめ