dp练习(9)——最大乘积-程序员宅基地

技术标签: 数据结构与算法  

1017 乘积最大

 

2000年NOIP全国联赛普及组NOIP全国联赛提高组

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述  Description

今年是国际数学联盟确定的“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设计一个程序,求得正确的答案。

输入描述  Input Description

   程序的输入共有两行:

   第一行共有2个自然数N,K(6≤N≤40,1≤K≤6)

   第二行是一个长度为N的数字串。

输出描述  Output Description

   结果显示在屏幕上,相对于输入,应输出所求得的最大乘积(一个自然数)。

样例输入  Sample Input

4  2

1231

样例输出  Sample Output

62

数据范围及提示  Data Size & Hint

本题由于比较老,数据实际也比较小,用long long 即可通过

#include<bits/stdc++.h>
using namespace std;

long long dp[1005][1005];
char s[1005];

long long SUM(int j,int i)
{
    long long sum = 0;
    for(int t=j-1;t < i;t++)
    {
        sum = sum * 10 + (s[t] - '0');
    }
    return sum;
}

int main()
{
    int n,k;
    cin >> n >> k;
    cin >> s;
    memset(dp,0, sizeof(dp));
    for(int i=1;i <= n;i++)
    {
        dp[i][0] = SUM(1,i);
//        cout << dp[i][0] << endl;
    }

    for(int h=1;h <= k;h++)
    {
        for(int i=1;i <= n;i++)
        {
            for(int j=1;j <= i;j++)
            {
                dp[i][h] = max(dp[i][h],dp[j][h-1] * SUM(j+1,i));
            }
        }
    }

//    for(int i=0;i < 5;i++)
//    {
//        for(int j=0;j < 5;j++)
//            cout << dp[i][j] << " ";
//        cout << endl;
//    }
    cout << dp[n][k] << endl;


    return 0;
}

隔了一天重写一遍,写的倒是很快,基本都是背出来的,不是自己想出来的,还是要加深理解,不要当一个模板战士。

转载于:https://www.cnblogs.com/cunyusup/p/8352629.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30807779/article/details/96285650

智能推荐

CentOS7.5(LAMP环境)部署FileRun个人网盘系统---超详细,一看就会系列_windows部署filerun_让我三行代码的博客-程序员宅基地

FileRun个人网盘介绍在以往我使用的都是OwnCloud私人网盘。但随着需求的增加和文件的增多,OwnCloud慢慢的有点"力不从心",不仅下载速度有所下降,而且还经常出现加载不出来的情况。因此我发现了FileRun个人网盘,发现FileRun的性能挺好,界面整洁美观。并且FileRun内部集很多插件,支持上百种文档编辑,并且自带编辑器功能,可以在线编辑。而且稳定。支持各种客户端。因此打算使用使用FileRun体验一下。说明:本人也是参考官方文档完成部署。官网地址:https://filerun._windows部署filerun

NDK各个版本链接-程序员宅基地

转载 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=5759600&uid=20622737目前不仅是国内不好找到各个版本的NDK,就连谷歌翻链接也总是出问题,这里给出一些各个版本的链接。 ndk_r11c (March 2016) Windows 32-bit : http://dl.google.com/andro

语义分割论文:BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation (ECCV2018)_eccv2018 bisenet在多少页-程序员宅基地

BiSeNet:BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation (ECCV2018)https://arxiv.org/pdf/1808.00897.pdf特点:1)Spatial Path 以保留原输入图像的空间尺度,并编码丰富的空间信息。Spatial Path 包含三层,每层包含一..._eccv2018 bisenet在多少页

HttpUrlConnection请求-程序员宅基地

package com.anshuangxin.week1_lianxi.NetUtils;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnecti

makefile增量编译的笔记-程序员宅基地

makefile增量编译的笔记_makefile增量编译

随便推点

bert中的sep_当Bert遇上Keras:这可能是Bert最简单的打开姿势-程序员宅基地

Bert是什么,估计也不用笔者来诸多介绍了。虽然笔者不是很喜欢Bert,但不得不说,Bert确实在NLP界引起了一阵轩然大波。现在不管是中文还是英文,关于Bert的科普和解读已经满天飞了,隐隐已经超过了当年Word2Vec刚出来的势头了。有意思的是,Bert是Google搞出来的,当年的word2vec也是Google搞出来的,不管你用哪个,都是在跟着Google大佬的屁股跑啊~Bert刚出来不久...

判断二维数组中是否存在某值_判断当前二维数组是否有某个参数-程序员宅基地

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:从数组的左下角元素开始比较,若目标整数等于该元素,则返回true, 若目标整数大于该元素,则 x 右移。若目标整数小于该元素,则 y 上移,重复此操作。public class Solution ..._判断当前二维数组是否有某个参数

安装rancher界面化管理docker-程序员宅基地

docker管理平台可以通过界面来创建镜像、拉取远程镜像、部署到指定主机、启停、增删扩容镜像,避免了各种各样的繁琐。1.查看是否安装了docker docker -v 出现版本号,则表示安装了docker若未安装 curl -sSL https://get.daocloud.io/docker | sh [docker安装资源文件存放在Amazon S3]2....

golang新特性arena,带你起飞-程序员宅基地

golang 1.20引入新特性arena,支持手动分配和释放内存,初步测试性能提升5%-15%甚至更多,真的是起飞了!尽管目前还是实验特性,对于泛型和反射reflect都已支持相当完善,常用场景比如JSON解析/ProtoBuf反序列化都会产生不少提升,本文带你提前全方位解析arena,并给出一些实际优化实践,早学早享受!

Map put 使用-程序员宅基地

import java.util.HashMap;import java.util.Map;public class TestMap { public static void main(String[] args) { Map&lt;String, Integer&gt; map = new HashMap&lt;String, Integer&gt;(); Integer it...

Matlab自学笔记_matlab求解一元多次方程的根-程序员宅基地

Matlab自学笔记之入门整理Matlab求解线性方程组的根求解线性方程组(Ax=b形式)方法一、clear clcA=[3 1 -1;1 2 -4; -1 4 5];b=[3.6;2.1;-1.4];x=A\b 方法二、clearclcA=[3 1 -1;1 2 -4..._matlab求解一元多次方程的根