摘要
-通過在大整數中新增加號使數字的值最小
原題目摘要
-最佳加法表示式-
描述給定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提示要用到高精度計算,即用陣列來存放long long 都裝不下的大整數,並用模擬列豎式的辦法進行大整數的加法。57915
題目理解
-使用大整數加法來計算各種可能的情況。計算過程中儲存計算過的值以供再利用
注意
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 ...