题目

P1018 乘积最大

解析

区间DP

设\(f[i][j]\)表示选\(i\)个数,插入\(j\)个乘号时的最大值

设\(num[i][j]\)是\(s[i,j]\)里的数字

转移方程就是\(f[i][k] = max(f[i][k], f[j][k - 1] * num[j + 1][i])\)

\(i\)为当前区间长度,\(j\)为枚举的断点的位置

代码

无高精板

#include <bits/stdc++.h>
#define int long long using namespace std; const int N = 100; int n, k;
int f[N][N], num[N][N]; char s[N]; template<class T>inline void read(T &x) {
x = 0; int f = 0; char ch = getchar();
while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
x = f ? -x : x;
return;
} signed main() {
read(n), read(k);
cin >> (s + 1);
for (int i = 1; i <= n; ++i)
for (int j = i; j <= n; ++j)
num[i][j] = num[i][j - 1] * 10 + s[j] - '0'; for (int i = 1; i <= n; ++i) f[i][0] = num[1][i]; for (int l = 1; l <= k; ++l) //插入k个乘号
for (int i = 1; i <= n; ++i)
for (int j = 1; j < i; ++j)
f[i][l] = max(f[i][l], f[j][l - 1] * num[j + 1][i]);
cout << f[n][k];
}

高精

f = [[0 for i in range(50)] for j in range(50)]
num = [[0 for i in range(50)] for j in range(50)] n, k = map(int, input().split())
s = input() for i in range(1, n + 1) :
for j in range(i, n + 1) :
num[i][j] = num[i][j - 1] * 10 + int(str(s)[j - 1]) for i in range(1, n + 1) :
f[i][0] = num[1][i] for l in range(1, k + 1) :
for i in range(1, n + 1) :
for j in range(1, i) :
f[i][l] = max(f[i][l], f[j][l - 1] * num[j + 1][i]) print(f[n][k])

P1018 乘积最大(DP)的更多相关文章

  1. P1018 乘积最大(高精度加/乘)

    P1018 乘积最大 一道dp题目.比较好像的dp题目. 然而他需要高精度计算. 所以,他从我开始学oi,到现在.一直是60分的状态. 今天正打算复习模板.也就有借口解决了这道题目. #include ...

  2. 洛谷 P1018 乘积最大

    P1018 乘积最大 题目描述 今年是国际数学联盟确定的“ 20002000 ――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰 9090 周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学 ...

  3. 【洛谷P1018】乘积最大 dp+高精度

    题目大意:给定一个 N 个数组成的串,可以在串中插入 M 个乘号,求乘积最大是多少.N <= 40 阶段:前 i 个数用了 j 个乘号. 仅用阶段可以表示出一个状态,因此状态转移方程为 \(dp ...

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

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

  5. Luogu - P1018 乘积最大 - 题解

    原文:https://www.luogu.org/problemnew/solution/P1018?page=7 题目:P1018[乘积最大] 前言: 这题的正解理论上说是DP,可是由于民间数据太水 ...

  6. 最大连续子序列乘积(DP)

    题目来源:小米手机2013年校园招聘笔试题 题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含多个测试样例.每个测试样例的第一行仅包含正整数 ...

  7. ALGO-17_蓝桥杯_算法训练_乘积最大(DP)

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

  8. luogu P1018 乘积最大

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

  9. 洛谷 P1018乘积最大

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

随机推荐

  1. sql server查看表大小

    查看SqlServer 数据库中各个表多少行 : SELECT A.NAME ,B.ROWS FROM sysobjects A JOIN sysindexes B ON A.id = B.id WH ...

  2. PHP系列 | [转] PHP中被忽略的性能优化利器:生成器

    官方:https://www.php.net/manual/zh/language.generators.overview.php 原文:https://segmentfault.com/a/1190 ...

  3. latch - undo global data等待事件分析

    一环境跑压力测试的时候,标题所述等待事件在top N中.不用查,也知道是因为undo竞争的事件. 根据metalink文档解释,是由于undo表空间不足引起的. This implies that s ...

  4. C++ 函数模板print

    简述 在知乎看到文章leetcode 的奇怪 println vector 工具,于是手痒自己也写了一个print函数. 因为工作中没有需要写这种代码的情况,所以好久没有写这种代码了,还是挺怀念以前学 ...

  5. iOS逆向必备绝技之ipa重签名

    一.重签名准备工作: 找到开发者证书和配置文件: 列出所有开发者证书文件: security find-identity -p codesigning -v 找一个开发环境配置文件生成entitlem ...

  6. Look Further to Recognize Better: Learning Shared Topics and Category-Specific Dictionaries for Open-Ended 3D Object Recognition

    张宁 Look Further to Recognize Better: Learning Shared Topics and Category-Specific Dictionaries for O ...

  7. js 动态加载 jq

    var script=document.createElement("script"); script.type="text/javascript"; scri ...

  8. 使用 Nginx 阻止恶意 IP 访问

    找到具有明显特征的访问记录,比如: /Dec/::: +] "-" "Ouija_x.86/2.0" "-" 也许是某个开源框架的漏洞,执行 ...

  9. General VDPConfig对讲配置工具

    General VDPConfig大华楼宇对讲配置工具是ConfigTool的一个对讲模块,主要服务对象为可视对讲的门口机和室内机,大华可视对讲在独户应用中,利用了自身在视频监控领域的优势,充分整合了 ...

  10. 【Spring Cloud学习之六】断路器-Hystrix

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 一.服务雪崩1.什么是服务雪崩分布式系统中经常会出现某个基础服务不可用造成整个系统不 ...