zjnu 1186 乘积最大(区间DP)

题目链接:

http://acm.zjnu.edu.cn/CLanguage/showproblem?problem_id=1186

思路:

区间DP。dp[i][j]表示前i个数字里面有j个乘号的时候的最大值。

那么就有dp[i][j]=max(dp[k][j-1]*x),这里1<=k

代码:

#include
#include
#define ll  __int64
ll max(ll a,ll b)
{
    return a>b?a:b;
}
int main()
{
    ll n,i,j,k,K,l,dp[55][10],x,w;
    char s[45];
    while(scanf("%I64d%I64d",&n,&K)!=EOF)
    {
        x=0;
        ll maxi=0;
        scanf("%s",s);
        l=strlen(s);
        for(i=0;ij-1)
                        dp[i][j]=max(dp[i][j],dp[k][j-1]*x);
                     }
                 }
             }
             //maxi=max(maxi,dp[i][j]);

         }

         printf("%I64d\n",dp[n][K]);

        }
   return 0;
}


你可能感兴趣的:(动态规划----------,区间dp)