zoukankan      html  css  js  c++  java
  • 牛客假日团队赛9 A 乘积最大 (简单DP)

    题目:https://ac.nowcoder.com/acm/contest/1071/A

    题意:给你一个串,然后给你m个乘号,用m个乘号分割开这个串,然后求分割可以求出的最大值

    思路:首先范围很小

    第一种:我把所有乘号分隔最多只有 C(40,6) 种方案,很少,我们直接dfs就可以算出来

    第二种:dp做法,我们考虑数组 dp[n][m]

    n代表当前位置,m代表用了m个乘号,然后数组值是到当前位置用m个乘号的最大值

    我们考虑最后一段数是在哪里,我们枚举位置,然后算出最后一段的值*前面位置用m-1个乘号的最大值

    转移方程:dp[i][j]=max(dp[i][j],dp[k][j-1]*最后一段数值)

    #include<bits/stdc++.h>
    #define maxn 1100
    #define mod 1000000007
    using namespace std;
    typedef long long ll;
    ll dp[50][7],n,m;
    char str[maxn];
    int main(){
        cin>>n>>m;
        cin>>str+1;
        for(int i=1;i<=n;i++){
            ll dex=1,sum=0;
            while(dex<=i){
                sum=sum*10+str[dex]-'0';
                dex++;
            }    
            dp[i][0]=sum;
            for(int j=1;j<=m;j++){
                for(int k=1;k<=i-1;k++){
                    ll dex=k+1,sum=0;
                    while(dex<=i){
                        sum=sum*10+str[dex]-'0';
                        dex++;
                    }    
                    dp[i][j]=max(dp[i][j],dp[k][j-1]*sum);
                }
            }
        }
        cout<<dp[n][m];
        return 0;
    } 
    View Code
  • 相关阅读:
    面向对象:
    Android体系结构
    面向对象DAO模式
    集合框架
    异常
    面向对象接口
    面向对象多态
    面向对象继承
    面向对象抽象封装
    JDBC
  • 原文地址:https://www.cnblogs.com/Lis-/p/11383965.html
Copyright © 2011-2022 走看看