最佳加法表示式 dp

2021-10-25 08:16:36 字數 924 閱讀 5523

description

有乙個由1…9組成的數字串,長度為n(1 ≤ n ≤ 100)。

問,如果將m(m ≤ 90)個加號(』+』)插入到這個數字串中,在各種可能形成的加法表示式中,值最小的那個表示式的值是多少?

本題不需考慮高精度。

input

多測試用例。每個測試用例佔一行。

每行是兩個整數m和n,意義如上所述。

output

每個測試用例輸出一行:值最小的加法表示式的值。

sample input

3 1234

2 1334

1 2333

4 1111111111

5 12345678

sample output

1020

5655

72第一眼看到題目我們就會想到用搜尋,但是時間複雜度太高了會超時。

動態規劃

dp[i][j]表示用i個+號劃分從0~j的字串得到的最小值

dp[ j ][ i ]=dp[j-1][r]+pow_1(r+1,i,s) (j<=r#include

using

namespace std;

#define inf 0x3f3f3f3f

long

long dp[

101]

[101];

long

long

pow_1

(int x,

int y,string s)

//將字串轉化為數

intmain()

}}} cout<[len-1]

<}}

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這些數的數值 用陣列將上面計算的數值儲存記憶,防止重複計算 轉移...