M個加號插入到數字串中使得加和最小 C 實現

2021-10-07 04:06:22 字數 1014 閱讀 3038

有乙個由數字1-9組成的數字串(長度不超過200),問如何將m(1<=m<=200)個加號插入這個數字串中,使得所形成的算術表示式的值最小。

加號不能加在數字串的最前面或最末尾,也不應有兩個或兩個以上的加號相鄰

m的值一定小於數字串的長度

例如:數字串79846,若需加入兩個加號,則最佳方案是79+8+46,算術表示式的值為133。

**如下:

#include

#include

using

namespace std;

const

int n =

200;

//const int inf = 0x3f3f3f3f;

int dp[n]

[n];

int num[n]

[n];

int m;

char ch[n]

;//算從第k個數字到第p個數字(不包括)組成的值

intnum

(int k,

int p)

int sum =0;

for(

int i = k; i) num[k]

[p]= sum;

return sum;

}//前p個數字加m個加號的最小值

intdp

(int p,

int m)

if(m ==0)

//賦乙個const型別的值,表示dp[p][m]一旦有了值以後就不允許通過賦值來改變它

//這裡用無窮大值inf = 0x3f3f3f3f的意義是?我隨便用個const int型別的值都可以啊

dp[p]

[m]= n;

for(

int i = p -

1; i>=m; i--

)return dp[p]

[m];

}int

main()

字元中找出連續最長的數字串

輸入示例 asdfgh245467sds12 輸出示例 先放 include includeusing namespace std int main else for int i 0 i 0 str i 9 for int i 0 i以下是我覺得重要的 for int i 0 i 0 str i 9...

數字序列中某一位的數字

面試題44 數字序列中某一位的數字 題目 數字以0123456789101112131415 的格式序列化到乙個字串行中。在這 個序列中,第5位 從0開始計數 是5,第13位是1,第19位是4,等等。請寫一 個函式求任意位對應的數字。static int digit at uint32 t inde...

數字序列中某一位的數字

012345678910.序列中,第n位數 def solution n if n 0 return 1 if n 10 return n i 2 確定是第幾位數 sums 10 ret 0while true 一位數 0 9 共10個字元 兩位數 10 99 共180個字元 三位數 100 999...