乘积最大

#include<iostream>
using namespace std;
int n,m;
long long s,a[41][41],f[41][7];
int main(){
    ios::sync_with_stdio(false);
    cin>>n>>m>>s;
    for(int i=n;i>=1;i--){
        a[i][i]=s%10;
        s/=10;
    }
    for(int i=2;i<=n;i++)
        for(int j=i-1;j>=1;j--)
            a[j][i]=(a[j][i-1]<<1)+(a[j][i-1]<<3)+a[i][i];
    for(int i=1;i<=n;i++)
        f[i][0]=a[1][i];
    for(int k=1;k<=m;k++)
        for(int i=k+1;i<=n;i++)
            for(int j=k;j<i;j++)
                f[i][k]=max(f[i][k],f[j][k-1]*a[j+1][i]);
    cout<<f[n][m]<<endl;
    return 0;
}
posted @ 2016-04-10 12:15  keshuqi  阅读(154)  评论(0编辑  收藏  举报