dp 最佳加法表示式

2021-07-15 04:32:56 字數 986 閱讀 6803

有乙個由1..9組成的數字串.問如果將m個加號插入到這個數字串中,在各種可能形成的表示式中,值最小的那個表示式的值是多少 

思路 :這個問題我們不知道最優的加號放置方式 ,不妨可以從最後乙個加號開始列舉,每次列舉乙個之後記憶化遞迴下乙個,效率非常高 提前預處理字串也是很關鍵的。

用dp[i][j]表示在前j個數字中插入i個+號所能形成的最小值.

1.如果i==0 那麼直接返回dp[0][j];

2.如果 i>=j那麼返回dp[i][j]=inf(不可到達)

3.剩下一種可能性要列舉

dp[i][j]=min(dp[i][j],solve(i-1,k)+num[k+1][j]) (k=1 2 3.........j-1)

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define inf 1e9+7

#define pi acos(-1)

#define natrule exp(1)

using namespace std;

#pragma comment(linker, "/stack:1024000000,1024000000")

int num[500][500];

int dp[500][500];

char s[300];

int d[500];

int solve(int i,int j)

memset(dp,-1,sizeof(dp));

for(int i=1;i<=n;i++)

stringstream ss(a);

ss>>num[i][j];

}}//input

for(int i=1;i<=n;i++){

for(int j=1;j<=n;j++){

cout<

dp 最佳加法表示式

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

DP 最佳加法表示式

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

最佳加法表示式 dp

description 有乙個由1 9組成的數字串,長度為n 1 n 100 問,如果將m m 90 個加號 插入到這個數字串中,在各種可能形成的加法表示式中,值最小的那個表示式的值是多少?本題不需考慮高精度。input 多測試用例。每個測試用例佔一行。每行是兩個整數m和n,意義如上所述。outpu...