(ssl 1595)加法最大#区间dp#

Description

设有一个长度为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给出后,找出一个分法使和为最大。 

分析:同乘法最大一样,区间型动态规划。

 

  • #include 
    #include 
    using namespace std;
    unsigned long long a[11][11],f[11][11];
    int n,k1; char s;
    int main(){
    	scanf("%d%d\n",&n,&k1);
    	for (int i=1;i<=n;i++) s=getchar(),a[i][i]=s-48; 
    	for (int i=2;i<=n;i++)
    	for (int j=i-1;j>=1;j--)
    	a[j][i]=a[j][i-1]*10+a[i][i]; //预处理
    	for (int i=1;i<=n;i++) f[i][0]=a[1][i]; //如果不用加号呢?
    	for (int k=1;k<=k1;k++)
    	for (int i=k+1;i<=n;i++)
    	for (int j=k;j

 

 

 

你可能感兴趣的:(区间dp,ssl,1595,加法最大)