ベストプラス表現
説明:
与えられたn個の1-9の数、Mプラスデジタル数(プラス側が番号を有していなければならない)、値が最小の式を加算することによって得られ、値を出力するようにとの間に配置された要件。例えば、1234 Plusで配置され、最良の方法は、12 + 34、および36を置くことです
入力
データのない15の以上のセット
2つのデータ行の各セット。Mプラス記号(0 <= M <= 50入れて示すと、最初の行は、Mの整数である )
第二行は桁数です。総数nは50以上であり、m <= N-1でありません
出力
データ値の各セット、加算式の最小出力
サンプル入力
2
123456
1
123456
4
12345
サンプル出力
102
579
15
ヒント
高精度計算を使用するように、長い長い整数を格納するための、すなわち大アレイにフィット、及び垂直列の大整数アナログ方法を添加しています。
トピックリンク:
https://vjudge.net/problem/OpenJ_Bailian-4152
DP [i] [j]は、iとjを加えて得られた最小の番号の前に追加の数を示します。[I] [J] =分(DP [X] [J-1] + num個の[X + 1] [I])ここで、x> = jとX DP伝達方程式<I NUM [X + 1] [I ]私は最初のビットにX + 1ビットの組成を表します。理解することは難しいかもしれない、理解するのに役立ち、紙を描画しようとする例えば、見ていません
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <fstreamの> 4の#include <アルゴリズム> 5の#include <cmath> 6の#include <両端キュー> 7の#include <ベクトル> 8の#include <キュー> 9#含む< ストリング > 10の#include <CStringの> 11の#include <地図> 12の#include <積層> 13の#include < 設定 > 14の#include <sstream提供さ> 15 の#define ME0(X)のmemset((X)、0、 sizeof((X))) 16 使って 名前空間をSTD; 17 のconst int型 L = 100 ; 図18は、ある 文字列 DP [ 100 ] [ 100 ]; 19 文字の追加(文字 A、文字列 B)// 2つだけの非負整数和 20は 、{ 21である 文字列ANS; 22である INT NA [ L] = { 0 }、Nbの[L] = { 0 }; 23である INTラ= a.size()、LB = b.size(); 24 用(INT I = 0 ; Iは、Laを<; I ++は) 25 のNa [LA-1 -疑わしい]は[I] = ' 0 'を、 26 のためには、(int型、I = 0 ; iがLBを<; I ++ ) 27 NB [PcBLIC 1疑わしい] = B [I] - ' 0 ' 。 28 int型 LMAX =ラ>ポンド?ラ:ポンド。 29 のためには、(int型 i = 0 ; I <LMAX、iは++ ) 30 の[I] + = NB [I]、[I + 1 ] + = [I] / 10、[I]%= 10 。 31 であれば([LMAX]) 32 LMAX ++ 。 33 以下のために(int型 I = lmax- 1 ; I> = 0 ; i-- ) 34の ANS + = [i]は+ナ' 0 ' 。 35の リターンANS; 36 } 37 列分(文字列、文字列 B)// 判断大小 38 { 39 であれば(a.length()< てb.length()) 40 リターン; 41 他の 場合(てb.length()< a.length()) 42 リターンB。 43 他 44 戻る <bは?A:B; 45 } 46 のint main()の 47 { 48 INT M。 49 文字列sの。 50 一方(CIN >> M >> S) 51 { 52 のS = " " + S。 53 INT LEN = s.length()。 54 のために(int型 I = 0 ; iがLEN = <; Iは++ ) 55 DP [I] [ 0 ] = s.substr(1 、I)。 56 のための(int型J = 1。 ; Jは<= M; J ++ ) 57である { 58 のために(int型 I = 0 Iは= LEN <; I ++は) 59 { 60 のため(intは X = J; Xは、<Iは、X ++ ) 61であり 、{ 62である /// / Xフロントの数及び'+'明確に確立されていない、等しく、X-1番目の"+"まで、個体が処置される数X 63は、 IF(X == J) 64 DP [I]、[J]を追加し= (DP [X] [J- 1 ]、s.substr(Xの+ 。1、I- X)); 65 // 他の場合に、状態遷移方程式 66 他の 67 DP [I] [J] =分(DP [I]、[J]、ADD(DP [X] [J- 1 ]、s.substr(X + 1、I- X)))。 68 } 69 } 70 } 71 COUT << DP [LEN] [M] << ENDL。 72 } 73 }