ACMの概要9

DPは、これらの日が学んできた、ここでまとめレンジ。
定義によるDP間隔は、最適な動的プログラミング最適解の最適解を得るために、最初のセルとの間で行われる広い範囲の間隔を求める組み合わされます。
一般的なアイデアを実現します

//mst(dp,0) 初始化DP数组
for(int i=1;i<=n;i++)
{
    dp[i][i]=初始值
}
for(int len=2;len<=n;len++)  //区间长度
for(int i=1;i<=n;i++)        //枚举起点
{
    int j=i+len-1;           //区间终点
    if(j>n) break;           //越界结束
    for(int k=i;k<j;k++)     //枚举分割点,构造状态转移方程// 枚举区间
    {
        dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]);//w[i][j]=sum[j] - sum[i-1]
    }
}

これら二つの問題点から学ぶために何かを合計するには。
石マージ質問
トピックリンク:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=737
説明:行に重ねN石、重ね石の特定の数のそれぞれ。今、私たちは山の中に石やNを重ねたいです。N-1回パイルに結合した後にパイルに石だけ各隣接重ね合わせ工程は、各合併のコストは、石のこれらの山にかかると。最小の総コストを検索します。
分析:n個の石の要件マージ、我々は最初の2あたりの最小コストは、nを知るために、マージされ、その後、すべての3つの最小コスト見つけ、DPの考え方に基づいてサブ問題に分割されています。用DP定義された状態[I] [j]は、i番目の石から石j番目の最小コストに合わせました。

2)マッチングブラケット

トピックリンク:

poj2955、http://poj.org/problem?id=2955

バター15
http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=15

説明:のみ「(」「)は」「[」の束与え
、すべてのブラケットが文字列正確に一致するように、少なくともいくつかのブラケットを追加解決する必要があるので、「ブラケットの4種類で構成される文字列]」を。
分析:我々は最大マッチングにこの文字列は、文字列の後、全体の長さを見つける-最大のマッチが答えです。

まず、それはサブ構造を有することによって解決することが定義さdpを満たす方法を検討
[i] [j]は、j番目の括弧にi番目の文字列であるDP定義されたマッチの最大数を
私はjに私たちが知っている最大間隔であればということ試合は、その後、1 1 + jまでの間隔が得られていない私+は非常にシンプルにすることができます。
そうi番目ので、DP一対のブラケットと一致j番目の[I] [j]はIF = DP [I + 1] [J-1] + 2と、
我々は、私はすべてを列挙するために大型に小さい必要と
括弧中間j内の数、そして次いでDPマッチングを満たすために、上記の式を用いて、各更新DP
最大値[I] [J]。
列挙方法は、iとjの中間値の最大値を更新することで、次にDPを聞かせ[I] [J] = [MAX(DP [I]、[J]、DP [I]、[F] + DP [F + 1] J])。

おすすめ

転載: blog.csdn.net/qq_43515378/article/details/89199331