zoukankan      html  css  js  c++  java
  • P1018 乘积最大

    https://www.luogu.org/problem/show?pid=1018#sub
    这里写图片描述
    这里写图片描述

    其实这个数据范围貌似搜索是过不了的,但是在lg上过了
    这里搜索的方法是,dfs(int x,LL ans,int bef),x表示已经用了几个乘号,ans表示前面放完乘号得到的乘积,bef表示上一个乘号放的位置(后面);
    那么,如果x< k,把bef和当前要放的位置之间的数乘进ans;
    放完最后一个,要把后面剩下的数乘进ans;
    而且,放第x个乘号时,位置不能大于n-k+x,因为要给后面的乘号留下足够的位置。

    #include<iostream>
    #include<cstdio>
    #define LL long long
    using namespace std;
    int n,k,a[50];
    LL maxn;
    void dfs(int x,LL ans,int bef)
    {
        if(x==k)
        {
            LL num=0;
            for(int i=bef+1;i<=n;i++)
            {
                num=num*10+a[i];
            }
            maxn=max(maxn,ans*num);
            return;
        }
        for(int i=bef+1;i<=n-k+x;i++)
        {
            LL num=0;
            for(int p=bef+1;p<=i;p++)
                num=num*10+a[p];
            dfs(x+1,ans*num,i);
        }
        return;
    }
    int main()
    {
        scanf("%d%d
    ",&n,&k);
        for(int i=1;i<=n;i++)
        {
            char o;
            cin>>o;
            a[i]=o-'0';
        }
        dfs(0,1,0);
        printf("%lld",maxn);
        return 0;
    
    }
  • 相关阅读:
    9.8
    9.6
    9.5
    树状数组
    逆序对
    tab标签切换(无炫效果,简单的显示隐藏)
    JQuery 的选择器
    简单的JQuery top返回顶部
    Hello Word!
    java Data 计算自己活了多少天
  • 原文地址:https://www.cnblogs.com/dfsac/p/7587933.html
Copyright © 2011-2022 走看看