設有乙個長度為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 位於網格的格點處。幸運的是,貝西有乙個強大的 可以在任何給定的行或列中的乙個單一的射擊汽化所有的小行星。這個 是相當昂貴的,所以她希望使用它節省。給所有的小行星的位置找到貝西...