题目大意:给定一个 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+高精度的更多相关文章

  1. 洛谷 P1018 乘积最大

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

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

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

  3. 洛谷 P1018乘积最大

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

  4. [NOIP2000] 提高组 洛谷P1018 乘积最大

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

  5. 洛谷—— P1018 乘积最大

    https://www.luogu.org/problem/show?pid=1018#sub 题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年 ...

  6. java实现 洛谷 P1018 乘积最大

    import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner ci ...

  7. 洛谷 P4902 乘积 (约数筛,前缀和(积))

    洛谷P4902乘积 题意简述: 给 $ t $ 组 $ (a,b) $ 求: $ \prod_{i=A}^{B}\prod_{j=1}^{i}(\frac{i}{j})^{\lfloor \frac{ ...

  8. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  9. NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp

    原文链接https://www.cnblogs.com/zhouzhendong/p/9261079.html 题目传送门 - 洛谷P3959 题目传送门 - Vijos P2032 题意 给定一个 ...

  10. 洛谷P1244 青蛙过河 DP/思路

    又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...

随机推荐

  1. 当给DataGrid的Itemssoure属性赋值引起TabControl_SelectionChanged事件

    在TabControl的TabItem下布局了DataGrid控件时,当给dg.ItemsSource 赋值时会触发父控件的TabControl_SelectionChanged事件; 类似问题原因可 ...

  2. echarts柱状图标签显示不完全的问题

    echarts 柱状图当x轴标签数目超过一定数目时在小尺寸设备上第一个和最后一个标签不显示(不是重叠),axisLabel设置interval:0也不起作用; 解决办法: 这个问题存在于4.0版本以上 ...

  3. Sql_连接查询中on筛选与where筛选的区别

    sql中的连接查询分为3种, cross join,inner join,和outer join ,  在 cross join和inner join中,筛选条件放在on后面还是where后面是没区别 ...

  4. 一个高性能的对象属性复制类,支持不同类型对象间复制,支持Nullable<T>类型属性

    由于在实际应用中,需要对大量的对象属性进行复制,原来的方法是通过反射实现,在量大了以后,反射的性能问题就凸显出来了,必须用Emit来实现. 搜了一圈代码,没发现适合的,要么只能在相同类型对象间复制,要 ...

  5. SpringMvc返回Json调试

    spring-web-5.0.6.RELEASE.jar!/org/springframework/web/method/support/HandlerMethodReturnValueHandler ...

  6. mysql 编码和汉字存储占用字节问题的探索

    MySql 5.5 之前,UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区,BMP是从哪到哪?基本就是 0000 ~ FFFF 这一区. 从MySQL 5.5 开始,可支持4 ...

  7. Git科普来一发:【rebase】与【merge】

    rebase 假设你现在基于远程分支"origin",创建一个叫"mywork"的分支. $ git checkout -b mywork origin 现在我 ...

  8. 个人阅读作业 final

    前两次阅读作业链接: http://www.cnblogs.com/SteelPillar/p/4027877.html http://www.cnblogs.com/SteelPillar/p/40 ...

  9. Linux内核第七节 20135332武西垚

    预处理.编译.链接和目标文件的格式 可执行程序是怎么得来的 以C语言为例,c代码经过编译器的预处理,编译成汇编代码,由汇编器编译成目标代码,再链接成可执行文件,由操作系统加载到cpu里来执行. (截图 ...

  10. MySQL存储和获取数据

    ---恢复内容开始--- 一.MySQL存储引擎? 1.引擎定义 存储引擎其实就是如何存取数据,如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系型数据苦中数据是以表格的形式,所 ...