当前位置: 首页 > news >正文

P1018 学习笔记

省流:高精度,但不是 python

题目传送门

经典 DP。

我们设 \(dp_{i,j}\) 表示前 \(i\) 位用 \(j\) 个乘号的最大值。

边界:\(dp_{i,0}=a_{1,i}\)

转移方程可以考虑对于 \((i,j)\) 枚举乘号的位置 \(k\) 进行转移,于是:

\[dp_{i,j}=\max_{k=j}^{i-1} dp_{k,j-1} \cdot a_{k+1,i} \]

答案就是 \(dp_{n,m}\)

但是——这题要装高精度!!

你可以写封装的,我就直接字符串了。

code
#include <bits/stdc++.h>
#define DEBUG
#define Ofile(s) freopen(s".in", "r", stdin), freopen (s".out", "w", stdout)
#define Cfile(s) fclose(stdin), fclose(stdout)
#define fast ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;using ll = long long;
using ull = unsigned long long;
using lb = long double;constexpr int mod = 998244353;
constexpr int maxn = 45;
constexpr int maxk = 1005;int n, k;
string s;string dp[maxn][maxn], a[maxn][maxn];string init(int l, int r){int pos = l;while (pos < r && s[pos] == '0')pos++;return s.substr(pos, r - pos + 1);
}string max(string x, string y){if (x.empty())return y;if (y.empty())return x;if (x.size() != y.size())if (x.size() > y.size())return x;else return y;else if (x > y)return x;else return y;
}string mul(string x, string y){int lenx = x.size(), leny = y.size(), lenz = x.size() + y.size();string z("");if (x == "0" || y == "0")return "0";int p[maxk], q[maxk], r[maxk];memset(p, 0, sizeof(p));memset(q, 0, sizeof(q));memset(r, 0, sizeof(r));for (int i = 0; i < lenx; i++)p[lenx - i] = x[i] - '0';for (int i = 0; i < leny; i++)q[leny - i] = y[i] - '0';for (int i = 1; i <= lenx; i++)for (int j = 1; j <= leny; j++)r[i + j - 1] += p[i] * q[j];for (int i = 1; i <= lenz; i++)r[i + 1] += r[i] / 10, r[i] %= 10;if (!r[lenz])--lenz;for (int i = lenz; i >= 1; i--)z += (char)(r[i] + '0');return z;
}int main() {fast;cin >> n >> k >> s;s = " " + s;for (int i = 1; i <= n; i++)for (int j = i; j <= n; j++)a[i][j] = init(i, j);for (int i = 1; i <= n; i++)dp[i][0] = a[1][i];for (int j = 1; j <= k; j++)for (int i = j + 1; i <= n; i++)for (int t = j; t < i; t++)dp[i][j] = max(dp[i][j], mul(dp[t][j - 1], a[t + 1][i]));cout << dp[n][k];return 0;
}
http://www.jsqmd.com/news/375686/

相关文章:

  • python super()方法和__class__变量
  • 基于SpringBoot和Vue的智慧医疗管理系统
  • 基于SpringBoot和Vue的政府集中采购管理系统设计与实现
  • Lab4-Lab: traps MIT6.1810操作系统工程【持续更新】 _
  • AI博主私藏|4款PPT工具实测,新手也能1小时出片(附避坑指南) - 品牌测评鉴赏家
  • AI博主实测|5款新手PPT工具,零门槛上手,告别熬夜排版 - 品牌测评鉴赏家
  • 芒格的“赢家的诅咒“提醒在高科技并购中的应用
  • 藏不住了,美妆博主实测TOP3,手动剃须刀闭眼冲!新手/敏感肌零踩雷 - 品牌测评鉴赏家
  • 操作系统安全必备技能:SELinux 操作指南
  • Lab3-Lab: traps MIT6.1810操作系统工程【持续更新】 _
  • 电商数据分析的自动化技术
  • 从理论到实践:大数据诊断性分析的完整教程
  • 美妆博主实测✅5款好用不贵手动剃须刀|平价封神不踩雷 - 品牌测评鉴赏家
  • 实测3款自动生成PPT工具|2026年AI博主私藏,打工人/程序员告别熬夜排版 - 品牌测评鉴赏家
  • 新手手动剃须刀|国货黑科技领衔,手残党也能剃出精致感 - 品牌测评鉴赏家
  • MySQL 数据库约束知识点整理(主键、自增、外键完整案例)
  • 实测不踩雷!3款好用不伤皮肤的手动剃须刀,敏感肌也能放心冲 - 品牌测评鉴赏家
  • 结构化数据 vs 非结构化数据:大数据领域的核心差异与技术选型
  • 实测20+款!2026手动剃须刀品牌排名,新手/敏感肌闭眼入不踩雷 - 品牌测评鉴赏家
  • 京东e卡回收正规平台价格如何,怎么选择?这些门道你得知道! - 京顺回收
  • 基于Nodejs+vue+ElementUI的扫码解锁共享单车管理系统设计与实现
  • 实测不踩雷!2026高端手动剃须刀品牌推荐,精致男士必入 - 品牌测评鉴赏家
  • 电商数据分析的未来挑战与机遇
  • 基于Nodejs+vue+ElementUI的人脸识别的无人值守自习室预约签到系统的设计与实现
  • 巴菲特-芒格的智慧城市投资:城市化进程中的机遇
  • 【YOLOv11多模态涨点改进】独家创新首发| CVPR 2024 | 引入BIEF特征交互融合模块, 提升红外与可见光多模态融合,利用跨模态注意力机制挖掘互补信息,助力YOLO多模态检测高效涨点
  • 【游记】2025,在SD的最后一天
  • 倒序思想|hash
  • 提示工程架构师:打造高性能提示缓存机制的秘诀
  • 【YOLOv8多模态涨点改进】独家创新首发| CVPR 2025 | 引入FDSM频率域动态地选择模块,高效融合红外和可见光多模态特征,精准保留有用信息、抑制冗余与噪声,助力目标检测、图像分割、分类