0818 OpenJ 13295 最佳加法表示式

2021-08-07 03:16:01 字數 1513 閱讀 5590

摘要

-通過在大整數中新增加號使數字的值最小

原題目摘要

-最佳加法表示式-

描述給定n個1到9的數字,要求在數字之間擺放m個加號(加號兩邊必須有數字),使得所得到的加法表示式的值最小,並輸出該值。例如,在1234中擺放1個加號,最好的擺法就是12+34,和為36

輸入有不超過15組資料

每組資料兩行。第一行是整數m,表示有m個加號要放( 0<=m<=50)

第二行是若干個數字。數字總數n不超過50,且 m <= n-1

輸出對每組資料,輸出最小加法表示式的值

樣例輸入

2

123456

1123456

412345

樣例輸出
102

57915

提示要用到高精度計算,即用陣列來存放long long 都裝不下的大整數,並用模擬列豎式的辦法進行大整數的加法。

題目理解

-使用大整數加法來計算各種可能的情況。計算過程中儲存計算過的值以供再利用

注意

dp陣列在每一組資料的計算都要重新整理 不然用了以前的資料就會出錯;

bigint在過載比較的過程中 注意小於的定義。

日期

-附加

-定義了大整數結構 過載+ < 運算子。

**

#include #include #include #include #include using namespace std;

#define max 80

struct bigint

void setval(char *str)

int cadd(char a,char b)

void clean(char *str,int len)

void rev(char *str)

void add(char *a,char *b,char *ans)

if(last!=0)ans[tick]=last+'0';

rev(a),rev(b),rev(ans);

}bigint operator +(bigint &b)

bool operator <(bigint &b)

}return false;

}};char num[max];

bigint getvar(int l,int r)

bigint dp[max][max];

bigint findmin(int n,int m)

return dp[n][m]=ans;

}int main()

cout<}

return 0;

}

最佳加法表示式

有乙個由1.9組成的數字串.問如果將m個加 號插入到這個數字串中,在各種可能形成的 表示式中,值最小的那個表示式的值是多少?思路 設定dp i j i表示為加號的個數,j表示到達陣列的第 include include include includeusing namespace std const...

最佳加法表示式

總time limit 1000ms memory limit 65536kb description 給定n個1到9的數字,要求在數字之間擺放m個加號 加號兩邊必須有數字 使得所得到的加法表示式的值最小,並輸出該值。例如,在1234中擺放1個加號,最好的擺法就是12 34,和為36 input 有...

最佳加法表示式

有乙個由1.9組成的數字串,問如果將m個加號插入到這個數字串中,在各種可能形成的表示式中,值最小的那個表示式的值是多少 輸入 5 3 1 2 3 4 5 輸出 24 解題思路 假定數字串長度是n,新增加號後,表示式的最後乙個加號添在第i個數字後面,那麼整個表示式的最小值,就等於在前i個數字中插入m ...