dp專題 最佳加法表示式

2021-09-07 15:32:46 字數 1042 閱讀 9688

在n個數字中插入m個加號使表示式的值最小

num[i][j]:位置i到位置j的所表示的數字。

遞推:dp[m][n]表示在n個數字中插入m個加號所能形成的表示式最小值

邊界條件:dp[0][i]=num[1][i]

遞推公式:dp[i][j]=min(dp[i-1][k]+num[k+1][j])(i<=k#include

using

namespace std;

int a[50]

;int num[50]

[50];

int dp[50]

[50];

intmain()

for(

int i=

1;i<=n;i++)}

for(

int i=

1;i<=n;i++

)for

(int i=

1;i<=m;i++

) dp[i]

[j]=s;}}

cout<[n]

}遞迴:

#include

using

namespace std;

int a[50]

;int num[50]

[50];

int dfs[50]

[50]=

};intv

(int m,

int n)

int s=(1

<<31)

-1;for

(int i=m;i<=n-

1;i++

) s=

min(s, dfs[m-1]

[i]+num[i+1]

[n]);}

return s;

}int

main()

for(

int i=

1;i<=n;i++)}

cout<<

v(m, n)

}

dp 最佳加法表示式

題意 有乙個由1.9組成的數字串.問如果將m個加號插入到這個數字串中,在各種可能形成的表示式中,值最小的那個表示式的值是多少。分析 假定數字串長度是n,添完加號後,表示式的最後乙個加號新增在第i 個數字後面,那麼整個表示式的最小值,就等於在前i 個數字中插入m 1個加號所能形成的最小值,加上 第i ...

dp 最佳加法表示式

有乙個由1.9組成的數字串.問如果將m個加號插入到這個數字串中,在各種可能形成的表示式中,值最小的那個表示式的值是多少 思路 這個問題我們不知道最優的加號放置方式 不妨可以從最後乙個加號開始列舉,每次列舉乙個之後記憶化遞迴下乙個,效率非常高 提前預處理字串也是很關鍵的。用dp i j 表示在前j個數...

DP 最佳加法表示式

小白近日沉迷演算法不可自拔 今天看到了非常經典的最佳加法表示式的題目 題意 給m個數字,在其中新增n個加號,使得結果最小 理解 分解成子問題 求在 m 1 個數中放加號 加號後的數值 準備 定義乙個函式number a,b 計算從a到b這些數的數值 用陣列將上面計算的數值儲存記憶,防止重複計算 轉移...