SSL 加法最大

2021-10-23 14:47:36 字數 1712 閱讀 4067

設有乙個長度為n的數字字串,分成k+1個部份,使其k+1部份相加的和為最大。例如:數字串』340670』,k=1,其加法有

3+40670=40673 34+0670=704 340+670=1010 3406+70=3476 34076+0=34076

其最大和為40673。

問題:當數字串和k給出後,找出乙個分法使和為最大。

6

1340670

40673
那麼我們設f[i][j]為前i個中取j個加號的最大和,方程為:

f [i

][j]

=max

(f[i

][j]

,f[l

][j−

1]+a

[l+1

][i]

(1

<=i

<=n

,1

<=j

<=k

,j

<=l

f[i][j]=max(f[i][j],f[l][j-1]+a[l+1][i](1<=i<=n,1<=j<=k,j<=lf[

i][j

]=ma

x(f[

i][j

],f[

l][j

−1]+

a[l+

1][i

](1<=i

<=n

,1<=j

<=k

,j<=l

code:

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int n,k;

string x,a[50]

[60],f[50]

[60];

string cmp

(string a,string b)

string add

(string a,string b)

string c1="";

int i=

10000

;while

(i>=

1&&c[i]==0

) i--

;while

(i>=1)

//cout}int

main()

cin>>x;

x.insert(0

," ");

for(

int i=

1;i<=n;i++

)for

(int j=i;j<=n;j++

) a[i]

[j]=x.

substr

(i,j-i+1)

;for

(int i=

1;i<=n;i++

) f[i][0

]=a[1]

[i];

for(

int i=

1;i<=n;i++)}

} string ans=

"0";

for(

int i=k;i) cout

}

強化題目:洛谷p1018 乘積最大

SSL 1595 加法最大 區間動態規劃

設有乙個長度為n的數字字串,分成k 1個部份,使其k 1部份相加的和為最大。例如 數字串 340670 k 1,其加法有 3 40670 40673 34 0670 704 340 670 1010 3406 70 3476 34076 0 34076 其最大和為40676。問題 當數字串和k給出後...

SSL 1338 最大匹配 人員分配

題意 description 設有m個工人x1,x2,xm,和n項工作y1,y2,yn,規定每個工人至多做一項工作,而每項工作至多分配一名工人去做。由於種種原因,每個工人只能勝任其中的一項或幾項工作。問應怎樣分配才能使盡可能多的工人分配到他勝任的工作。這個問題稱為人員分配問題。讀入 input 第一...

小行星 SSL 1341(最大匹配)

描述 貝西希望通過乙個n n網格 1 n 500 形狀的危險小行星場來駕駛她的飛船。網格包含k個小行星 1 k 10,000 位於網格的格點處。幸運的是,貝西有乙個強大的 可以在任何給定的行或列中的乙個單一的射擊汽化所有的小行星。這個 是相當昂貴的,所以她希望使用它節省。給所有的小行星的位置找到貝西...