• TYVJ P1047 乘积最大 Label:dp


    背景

    NOIP 2000 普及组 第三道

    描述

    今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:
    设有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
    同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:
    有一个数字串: 312,当N=3,K=1时会有以下两种分法:
    1)3*12=36
    2)31*2=62
    这时,符合题目要求的结果是: 31*2=62
    现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。

    输入格式

    程序的输入共有两行:
    第一行共有2个自然数N,K (6<=N<=40,0<=K<=5)
    第二行是一个K度为N的数字串。

    输出格式

    结果输出到文件,相对于输入,应输出所求得的最大乘积(一个自然数)。

    测试样例1

    输入

    4 2 
    1231

    输出

    62

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int f[45][45],sum[45][45],N,M;
    int main(){
    //    freopen("01.txt","r",stdin);
        scanf("%d%d",&N,&M);
        string s;
        cin>>s;
        for(int i=0;i<N;i++){sum[i+1][i+1]=int(s[i]-'0');}
        for(int i=1;i<=N;i++)
            for(int j=i+1;j<=N;j++)
                sum[i][j]=sum[i][j-1]*10+sum[j][j];
        for(int i=1;i<=N;i++) f[i][0]=sum[1][i];
        for(int i=1;i<=M;i++){
            for(int j=i+1;j<=N;j++){
                for(int k=i;k<j;k++){
                    f[j][i]=max(f[j][i],f[k][i-1]*sum[k+1][j]);
                }
            }
        }
        printf("%d
    ",f[N][M]);
        return 0;
    }

    几个点讲一下:

    1)用字符串输入,不用逆序存sum数组;

    2)sum数组用来打表,sum[i][j]表示i到j的数值,如79123中,sum[2][5]=9123,sum[1][2]=79;

    3)之前一直做的都是模板类的dp,看到这一题是蒙蔽的,抄了好多题解和blog才大概知道怎么写;

    4)f[j][i]表示j个数用i个乘号分开的最大值.

    附同类题目:tyvj 1045 http://www.cnblogs.com/radiumlrb/p/5792082.html

    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/radiumlrb/p/5782800.html
Copyright © 2020-2023  润新知