320エネルギーネックレス(間隔DP)

ポータル

説明

火星では、火星人一人がエネルギーのネックレスの束を着用することが、ネックレスのエネルギービーズのN部分があります。

エネルギービーズはヘッドとテールマークラベルされたビーズを持って、これらのマークは、正の整数に対応しています。

そして、隣接する二つのビーズのために、マーカーの終了前にビーズは、ビーズの後の最初のマークと同じでなければなりません。

エネルギーの放出がチャックによって吸収されてもよいだけこのように、吸引カップ(吸盤臓器火星ヒトエネルギー吸収である)効果、2つのビードは、ビードに重合します。

前者ヘッドエネルギー標識ビーズをm場合、ポストアンブルは、R、R際にヘッド標識されたビーズのエネルギーのエネルギーであり、終了フラグは、Nであり、次いで重合mに解放R&LT N-(火星単位)、新たに生成されましたヘッドM、テールマーク標識されたビーズは、Nです。

必要な場合には、吸盤と火星人は、次のビーズのネックレスまで残されるまで、エネルギーを重合して得られた2個の隣接したビーズを、クランプ。

もちろん、重合GETの異なる順序の総エネルギーは、あなたがリリースされた最大総エネルギーのうちのネックレスを作るための重合の順序を設計し、異なっています。

例えば:頭部および尾部を標識した標識レッツNは= 4,4ビーズ(2,3)、(3,5)、(5,10)、(10,2)。

我々は、重合が解放後に2つのビードをK、シンボル⊕2つのビード重合操作、(j⊕k)Jのエネルギーを表すを使用します。それから

4,1解除2つのビードエネルギーの重合後:(4⊕1)= 10 2 3 = 60。

このネックレスの総エネルギーは、((4⊕1)⊕2)⊕3)= 10解放重合のための最適値を求めることができる2。3 + 10 。3。5 + 10 。5 10 = 710。

入力形式

第一の入力線は、正の整数N、ネックレス上のビーズの数です。

2行目は、nは正の整数のスペースですべての数のビーズのない1000以上、にi番目、i番目のヘッドマーク、I <N、ビーズのポストアンブルはIに等しくなるべきで分離されます私は頭の中で標識されたビーズの+ 1、テールマークが第1のビードのN番目のビーズヘッドマークに等しくなければなりません。

ビーズの順序については、あなたが判断できるように表にネックレス、クロス現れないビーズは、必要に応じて最初に指定し、次に時計回り他のビーズに順序を決定します。

出力フォーマット

出力のみの1行は、正の整数E、リリースされ、最適な総エネルギー重合性のシーケンスです。

データ範囲

4≤N≤100、
1≤E≤2.1* 109

サンプル入力:

4
2 3 5 10

出力例:

710

この質問のために、実際には、及び石の合併は大きな違いは差が合成重みを計算し、方法は、この質問は、環状であるが、ではありません

我々は彼がリニアになり、それが石の区別を欠いマージする必要があるので、これは、リングであるので、

次のようにACコードは次のとおりです。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e2+10;
const int inf=0x3f3f3f3f;
const int mod=1e9;
int a[maxn],dp[maxn][maxn],n;
char b[maxn];
int main() {
	cin>>n;
	for(int i=1;i<=n;i++)	cin>>a[i],a[i+n]=a[i];
	for(int len=1;len<=n;len++)
	{
		for(int i=1;i+len<2*n+1;i++)
		{
			int end=i+len-1;
			for(int j=i;j<end;j++)
			{
				dp[i][end]=max(dp[i][end],dp[i][j]+dp[j+1][end]+a[i]*a[j+1]*a[end+1]);
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++)ans=max(ans,dp[i][i+n-1]);
	cout<<ans<<endl;
	return 0;
}
公開された65元の記事 ウォンの賞賛4 ビュー466

おすすめ

転載: blog.csdn.net/Onebelieve_lxl/article/details/103974167