【洛谷P1018】乘积最大 dp+高精度
题目大意:给定一个 N 个数组成的串,可以在串中插入 M 个乘号,求乘积最大是多少。N <= 40
阶段:前 i 个数用了 j 个乘号。
仅用阶段可以表示出一个状态,因此状态转移方程为 \(dp[i][j]=max\{dp[k][j-1]*val(k+1,i),k\in[j,i] \}\)。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=50;
struct node{
int t[110],len;
node(){this->clear();}//构造函数需要初始化
void get_num(int a[maxn],int l,int r){
this->clear();
for(int i=r;i>=l;i--)this->t[++this->len]=a[i];
}
void operator=(const node& y){
this->clear();
for(int i=1;i<=y.len;i++)this->t[i]=y.t[i];
this->len=y.len;
}
bool operator<(const node& y){
if(this->len^y.len)return this->len<y.len;
for(int i=this->len;i>=1;i--)if(this->t[i]^y.t[i])return this->t[i]<y.t[i];
return 0;
}
node operator*(const node& y){
node x;
for(int i=1;i<=this->len;i++)
for(int j=1;j<=y.len;j++)
x.t[i+j-1]+=this->t[i]*y.t[j];//注意 i+j-1
for(int i=1;i<=105;i++)x.t[i+1]+=x.t[i]/10,x.t[i]%=10;
for(int i=105;i>=1;i--)if(x.t[i]!=0){x.len=i;break;}
return x;
}
void print(){
for(int i=this->len;i>=1;i--)printf("%d",this->t[i]);
puts("");
}
void clear(){
this->len=0;
memset(this->t,0,sizeof(this->t));
}
}dp[maxn][maxn];
int n,m,a[maxn];
char s[maxn];
void read_and_parse(){
scanf("%d%d%s",&n,&m,s+1);
for(int i=1;i<=n;i++)a[i]=s[i]-'0';
}
void solve(){
for(int i=1;i<=n;i++)dp[i][0].get_num(a,1,i);
for(int i=1;i<=n;i++)
for(int j=1;j<=min(m,i-1);j++)
for(int k=j;k<i;k++){
node t;t.get_num(a,k+1,i);
node x=t*dp[k][j-1];
if(dp[i][j]<x)dp[i][j]=x;
}
dp[n][m].print();
}
int main(){
read_and_parse();
solve();
return 0;
}
【洛谷P1018】乘积最大 dp+高精度的更多相关文章
- 洛谷 P1018 乘积最大
P1018 乘积最大 题目描述 今年是国际数学联盟确定的“ 20002000 ――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰 9090 周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学 ...
- 洛谷P1018乘积最大——区间DP
题目:https://www.luogu.org/problemnew/show/P1018 区间DP+高精,注意初始化和转移的细节. 代码如下: #include<iostream> # ...
- 洛谷 P1018乘积最大
题目描述 今年是国际数学联盟确定的“20002000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰9090周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友 ...
- [NOIP2000] 提高组 洛谷P1018 乘积最大
题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...
- 洛谷—— P1018 乘积最大
https://www.luogu.org/problem/show?pid=1018#sub 题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年 ...
- java实现 洛谷 P1018 乘积最大
import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner ci ...
- 洛谷 P4902 乘积 (约数筛,前缀和(积))
洛谷P4902乘积 题意简述: 给 $ t $ 组 $ (a,b) $ 求: $ \prod_{i=A}^{B}\prod_{j=1}^{i}(\frac{i}{j})^{\lfloor \frac{ ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
原文链接https://www.cnblogs.com/zhouzhendong/p/9261079.html 题目传送门 - 洛谷P3959 题目传送门 - Vijos P2032 题意 给定一个 ...
- 洛谷P1244 青蛙过河 DP/思路
又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...
随机推荐
- 基于 HTML5 Canvas 的 3D WebGL 机房创建
对于 3D 机房来说,监控已经不是什么难事,不同的人有不同的做法,今天试着用 HT 写了一个基于 HTML5 的机房,发现果然 HT 简单好用.本例是将灯光.雾化以及 eye 的最大最小距离等等功能在 ...
- BugkuCTF 矛盾
前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...
- Python零基础入门(安装步骤,验证方式, 简单操作)
本篇文章适合新人小白初步了解Python,涵盖Python的介绍.安装以及简单的基础操作. 1.Python简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.它的设 ...
- Scrum Meeting NO.7
Scrum Meeting No.7 1.会议内容 经过老师提醒,我们认识到,应尽快把主要功能实现,其他的细枝末节应在这之后慢慢添加.当今最重要的任务是和online组和数据处理组实现数据共享. 此外 ...
- TestSushu1
https://github.com/jzjaerui/Individual-Project/blob/master/TestSushu1 <程序设计实践I> 题目: ...
- [转] Linux有问必答:如何修复“sshd error: could not load host key”
编译自:http://ask.xmodulo.com/sshd-error-could-not-load-host-key.html作者: GOLinux 本文地址:https://linux.cn/ ...
- PAT 1013 数素数
https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112 令P~i~表示第i个素数.现任给两个正整数M ...
- Spring框架最简单的定时任务调用
package org.jeecgframework.core.timer; import org.springframework.scheduling.annotation.Scheduled; i ...
- eclipse repository connector
- PS(光影魔术手)
完成