题目

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. 划水嘶吼misc

    划水嘶吼misc [题目描述]: 开局一张图,flag全靠编 [题目writeup]: 瞅半天,瞅到二维码 然后用potplayer按帧查找到skr二维码 通过PS自动调整对比度,扫出key1,2,3 ...

  2. Java String.split()函数分隔回车注意事项

    作者:Sun1956 原文:https://blog.csdn.net/sun1956/article/details/45096117 --------------------- 我们在Java中如 ...

  3. SpringBoot(3)自定义Filter

    SpringBoot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,当然我们可以自定 义Filter. 自定义Filter需要两个 ...

  4. Python10大热门项目

    文章地址:https://baijiahao.baidu.com/s?id=1625230403885659615&wfr=spider&for=pc 今天给大家盘点一下实验楼最热门的 ...

  5. JDBC 线程安全 数据库连接池

    jdbc 是线程安全的,但是,推荐一个线程用一个链接 JDBC is thread safe: It is quite OK to pass the various JDBC objects betw ...

  6. python开源项目聚合推荐【1】

    ******************************************************* 01项目名:unimatrix 功能介绍:Python模拟“黑客帝国”影片中的终端动画脚 ...

  7. Consider defining a bean of type 'com.*.*.feign.*FeignClient' in your configuration.

    Description: Field *FeignClient in com.*.*.service.* required a bean of type '***********' that coul ...

  8. 内存自动清理.sql

    --清除存储过程缓存 DBCC FREEPROCCACHE --注:方便记住关键字 FREEPROCCACHE可以拆解成 FREE(割舍,清除) PROC(存储过程关键字简写),CACHE(缓存) - ...

  9. error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.

    . . . . . 今天从 github 上 clone 代码的时候,出现了一个错误,重试多次后仍然出现,错误如下: >$ git clone https://github.com/BOINC/ ...

  10. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案之使用RTSP流判断摄像机设备是否在线以及快照抓取

    背景分析 熟知EasyNVR产品的小伙伴都知道,通过纯Web化的交互方式,只要配置出摄像机的IP.端口.用户名.密码等信息,就可以将地址进行通道配置完成,即可将设备接入.如果设备支持Onvif协议,E ...