説明
火星では、火星すべての人は、エネルギーのネックレスの束を着用すること。ネックレスエネルギーのビーズのN個があります。エネルギービーズはヘッドとテールマークラベルされたビーズを持って、これらのマークは、正の整数に対応しています。そして、隣接する二つのビーズのために、マーカーの終了前にビーズは、ビーズの後の最初のマークと同じでなければなりません。エネルギーの放出がチャックによって吸収されてもよいだけこのように、吸引カップ(吸盤臓器火星ヒトエネルギー吸収である)効果、2つのビードは、ビードに重合します。前者ヘッドエネルギーはビーズmを標識した場合、ポストアンブルをr、R標識されたビーズ、テールマークのヘッドのエネルギーをnと、次いで(火星単位)をリリース重合エネルギーの後、ビーズを新たに生成しましたヘッドは、テールマークがnであり、mとなりました。
必要な場合には、隣接する二つのビーズをクランプ吸盤と火星人は、次のビーズのネックレスまで左まで、エネルギーを重合して得られます。もちろん、重合GETの異なる順序の総エネルギーは、あなたがリリースされた最大総エネルギーのうちのネックレスを作るための重合の順序を設計し、異なっています。
例:N =頭部および尾部標識4,4ビーズを標識した(2,3)、(3,5)、(5,10)、(10,2)とします。我々は、重合が解放後に2つのビードをK、2つのビード重合操作、(j⊕k)Jのエネルギーを表す⊕シンボルを使用します。最初の2つのビードによって解放重合エネルギーの後4,1です。
(4⊕1)10 * 2 * 3 = 60 =。
このネックレスは、最適値を発表した重合のための総エネルギーすることができ
((4⊕1)⊕2)⊕3)= 710 * 2 10 * 3 + 10 * 3 * 5 + 10 * 5 * 10 =。
入力
最初の入力ラインは、正の整数N(4≤N≤100)であるネックレス上のビーズの数を表します。第二のラインは1,000全ての数以上ではない、nは正の整数の空間によって分離されています。ビードの端部をマーキングiがN <スパン<I番目(1≤i≤N)の第1のビード、>のi番目のタグは、ビーズのI + 1ヘッドマークIに等しくなければなりません。N標識ビーズは、標識されている第1のビードのヘッドエンドに等しくなければなりません。
ビーズの順序については、あなたが判断できるように表にネックレス、クロス表示されない、任意に最初に指定されたビーズは、その後、時計回り他のビーズに順序を決定します。
出力
唯一のライン出力は、正の整数E(E≤2.1* 109)、解放重合のための最適な総エネルギーです。
サンプル入力
4 2 3 5 10
サンプル出力
710
ソース
アイデア:DPの範囲を確認するために始めているが、理解していないと、3つのアレイのそれぞれの合計、またはどのように従事するために製品を維持することです。
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #defineっ長い長 の#define EPS 1E-9 の#defineパイACOS(-1)のconst int型 INF = 0x3f3f3f3f 。 const int型のmod = 1000000007 ; const int型 MAXN = 1000年 + 8 。構造体ノード { INT M。 } [MAXN]。 LL DP [MAXN] [MAXN]。int型のn; INT メイン() { のstd :: IOS :: sync_with_stdio(0 )。 cin.tie( 0 )。 cout.tie(0 )。 cinを >> N; 以下のために(int型 i = 1 ; iが<= N; iは++ ) { CIN >> [I] .M。 A [iが + N] .M = [I] .M。 } のための(INT LEN = 2 ; LEN <= N; LEN ++)/// 长度 { ため(int型 i = 1 ; iは+ LEN - 1 < 2 * N; iは++)/// 起点 { INTEN =私はlenの+ - 1。/// 终点 DP [I] [EN] = - INF。 以下のために(int型 K = I; kは<EN ++ k個) [I] [EN] DPを = MAX(DP [I] [EN]、DP [I] [K] + DP [K + 1 ] [EN] + Aを[I] .M * [K + 1 ] .M * [EN + 1 ] .M)。 } } LL MI = DP [ 1 ] [N]; 以下のために(int型 I = 2 iが++; iが<= N ) 場合 - (MI <DP [I] [I + N 1 ]) MI = DP [I] [I + N - 1]; coutの << MI << ' \ nを' ; リターン 0 ; } / * * /