• cogs87 乘积最大


    cogs87 乘积最大


    原题链接


    题解

    竟然不用高精。。。
    f[i][j]表示前i位数j个乘号的最大数f[i][j]=max{f[i-l][j-1]*num[i-l+1][i]}
    num[a][b]表示字符串a..b位的数


    Code

    // It is made by XZZ
    #include<cstdio>
    #include<algorithm>
    #define Fname "cjzd"
    using namespace std;
    #define rep(a,b,c) for(rg int a=b;a<=c;a++)
    #define drep(a,b,c) for(rg int a=b;a>=c;a--)
    #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
    #define il inline
    #define rg register
    #define vd void
    typedef long long ll;
    il int gi(){
        rg int x=0;rg char ch=getchar();
        while(ch<'0'||ch>'9')ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x;
    }
    char str[42];
    ll num[42][42];
    ll f[42][42];
    il vd print(ll n){
        if(n/10)print(n/10);
        putchar(n%10+'0');
    }
    int main(){
        freopen(Fname".in","r",stdin);
        freopen(Fname".out","w",stdout);
        int n=gi(),k=gi();
        scanf("%s",str+1);
        rep(i,1,n)rep(j,i,n)num[i][j]=num[i][j-1]*10+str[j]-'0';
        rep(i,1,n)f[i][0]=num[1][i];
        rep(i,1,n)rep(j,1,k)rep(l,1,i-1)f[i][j]=max(f[i][j],f[i-l][j-1]*num[i-l+1][i]);
        if(f[n][k])print(f[n][k]);
        else puts("0");
        return 0;
    }
    

    PS.洛谷竟然因为一个讨论贴更新数据。。。这是人性的扭曲还是道德的沦丧
  • 相关阅读:
    第 2 章 OpenStack 架构
    第 2 章 OpenStack 架构
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
    第 1 章 虚拟化
  • 原文地址:https://www.cnblogs.com/xzz_233/p/7496656.html
Copyright © 2020-2023  润新知