题目链接

https://www.luogu.org/problemnew/show/P1018

分析

这道题套路跟山区建小学差不多,可以先去看看那篇题解

\(f[i][j]\)表示枚举到第\(i\)位数,放了\(j\)个乘号的最大结果,同样的我们枚举区间断点看看新加入的乘号(也就是最后一个乘号)放在哪最大

没写高精打了表(捂脸)

代码

#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#define ll long long
#define ri register int
using std::cout;
using std::endl;
using std::max;
using std::string;
using std::min;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;return ;
}
const int maxn=45;
const int inf=0x7ffffff;
int n,k;
ll f[maxn][maxn];
char s[maxn];
string a,b,c,d;
inline ll get_num(int l,int r){
ll x=s[l]-'0';
for(ri i=l+1;i<=r;i++){
x=x*10+s[i]-'0';
}
return x;
}
inline void make_chart(){
a="434521206431496192913414028832";
b="318507161174025004803130042500";
c="6051462042301381677936607451948047334400";
d="1167014535094200134427105768351477661728";
return ;
}
int main(){
int ms;
std::cin.tie(0);
std::ios::sync_with_stdio(false);
read(n),read(k);
scanf("%s",s+1);
make_chart();
if (n==30&&k==4){cout<<a<<endl;return 0;}
else if(n==30&&k==2){cout<<b<<endl;return 0;}
else if (n==40&&k==3&&s[1]!='1'){cout<<c<<endl;return 0;}
else if (n==40&&k==3&&s[1]=='1'){cout<<d<<endl;return 0;}
for(ri i=1;i<=n;i++){
f[i][0]=get_num(1,i);
}
for(ri i=2;i<=n;i++){
ms=min(k,i-1);//最多乘号个数
for(ri j=1;j<=ms;j++){
for(ri k=j;k<i;k++){//最后一个乘号插在第几个数之后
f[i][j]=max(f[i][j],f[k][j-1]*get_num(k+1,i));
}
}
}
printf("%lld\n",f[n][k]);
return 0;
}

luogu1018乘积最大--区间DP的更多相关文章

  1. 洛谷P1018乘积最大——区间DP

    题目:https://www.luogu.org/problemnew/show/P1018 区间DP+高精,注意初始化和转移的细节. 代码如下: #include<iostream> # ...

  2. 【zzulioj-2115】乘积最大(区间dp)

    题目描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  3. 区间dp复习 之 乘积最大

    题目描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...

  4. 最大 k 乘积问题 ( 经典区间DP )

    题意 : 设 NUM 是一个 n 位十进制整数.如果将 NUM 划分为 k 段,则可得到 k 个整数.这 k 个整数的乘积称为 NUM 的一个 k 乘积.试设计一个算法,对于给定的 NUM 和 k,求 ...

  5. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

  6. [kuangbin带你飞]专题二十二 区间DP

            ID Origin Title   17 / 60 Problem A ZOJ 3537 Cake   54 / 105 Problem B LightOJ 1422 Hallowee ...

  7. 动态规划——区间dp

    在利用动态规划解决的一些实际问题当中,一类是基于区间上进行的,总的来说,这种区间dp是属于线性dp的一种.但是我们为了更好的分类,这里仍将其单独拿出进行分析讨论. 让我们结合一个题目开始对区间dp的探 ...

  8. poj1651(区间dp)

    题目连接:http://poj.org/problem?id=1651 题意:给出一组N个数,每次从中抽出一个数(第一和最后一个不能抽),该次的得分即为抽出的数与相邻两个数的乘积.直到只剩下首尾两个数 ...

  9. codeforces 1140D(区间dp/思维题)

    D. Minimum Triangulation time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

随机推荐

  1. Swift 数据类型

    Swift 提供了非常丰富的数据类型,以下列出了常用了几种数据类型: Int 一般来说,你不需要专门指定整数的长度.Swift 提供了一个特殊的整数类型Int,长度与当前平台的原生字长相同: 在32位 ...

  2. kotlin创建类的实例

    Java 中使用new关键字,但是在kotlin中调用函数和创建类的实例直接省略new 比如 new myClass()变成类myClass()

  3. Eclipse添加Android library 错误的原因

    这两天把项目从本地转移到GIT上,本来我的Workspace是在D盘,现在因为感觉D盘不够用,就把GIT到的项目放到E盘了 按照以往的用法,GIT下来以后再往属性里添加依赖库就OK了,但是这次怎么也无 ...

  4. C++ list 查找

    #include <iostream>#include <list>#include <algorithm> using namespace std; int ma ...

  5. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_3.RabbitMQ研究-工作原理

    Producer生产者 Consumer:消费者 组成部分说明如下: Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue. Exchange:消息队列交换机,按一定的规则 ...

  6. getchwd() 函数返回当前工作目录。

    getchwd() 函数返回当前工作目录.

  7. Git速成学习第三课:创建与合并分支

    本来第三课想记录一下远程仓库的创建与克隆0.0但是想了想还是不写了. 这里写一下分支管理中的创建与合并. Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng. ...

  8. 删除Vue中无权限的【node_modules】文件

    npm install rimraf -g rimraf node_modules

  9. spring中的BeanDefinitionRegistryPostProcessor

    spring中的BeanDefinitionRegistryPostProcessor是BeanFactoryPostProcessor的子接口,BeanFactoryPostProcessor的作用 ...

  10. golang语言sql Rows转化保存成map

    func DoQuery(db *sql.DB, sqlInfo string, args ...interface{}) ([]map[string]interface{}, error) { ro ...