最佳加法表示式
有乙個由1..9組成的數字串.問如果將m個加號插入到這個數字串中,在各種可能形成的表示式中,值最小的那個表示式的值是多少
解題思路
假定數字串長度是n,添完加號後,表示式的最後乙個加號新增在第 i 個數字後面,那麼整個表示式的最小值,就等於在前 i 個數字中插入 m – 1個加號所能形成的最小值,加上第 i + 1到第 n個數字所組成的數的值(i從1開始算)。
解題思路
設v(m,n)表示在n個數字中插入m個加號所能形成的表示式最小值,那麼:
if m = 0,
v(m,n) = n個數字構成的整數
else if n < m + 1
v(m,n) = ∞
else
v(m,n) = min ( i = m ... n-1)
num(i,j)表示從第i個數字到第j個數字所組成的數。數字編號從1開始算。此操
作複雜度是o(j-i+1)
總時間複雜度:o(mn 2 )
**如下:
#include#include#include#include#includeusing namespace std;
int dp[100][200];
char str[500];
//dp[m][n]表示的是示在n個數字中插入m個加號所能形成的表示式最小值
int change(int x,int y)
return t;
}int main()
return 0;
}
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這些數的數值 用陣列將上面計算的數值儲存記憶,防止重複計算 轉移...