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

洛谷题解P1249 最大乘积

https://www.luogu.com.cn/problem/P1249

本题解基于数学公式推导,并未采取常见的贪心做法。

以下是推导,源论文在最底

(其实就是自己推了大半天发现推出来有些情况没覆盖导致wa了,特意搜了搜,顺便熟悉下latex)

#include <bits/stdc++.h>
using namespace std;struct BigInt {vector<int> d;BigInt(long long x = 0) {if (x == 0) d = { 0 };else while (x > 0) { d.push_back(x % 10); x /= 10; }}string toString() const {if (d.empty()) return "0";string s; s.reserve(d.size());for (auto it = d.rbegin(); it != d.rend(); ++it) s.push_back(char('0' + *it));return s;}void multiply(int x) {if (x == 0) { d = { 0 }; return; }long long carry = 0;for (size_t i = 0; i < d.size(); ++i) {long long t = (long long)d[i] * x + carry;d[i] = int(t % 10);carry = t / 10;}while (carry) {d.push_back(int(carry % 10)); carry /= 10; }}void divide(int x) {if (x == 0) return;long long rem = 0;for (int i = (int)d.size() - 1; i >= 0; --i) {long long cur = rem * 10 + d[i];d[i] = int(cur / x);rem = cur % x;}while (d.size() > 1 && d.back() == 0) d.pop_back();}
};BigInt factorial(int n) 
{BigInt r(1);for (int i = 2; i <= n; ++i) r.multiply(i);return r;
}pair<string, vector<int>> maxProductFactors(int n) 
{vector<int> factors;if (n == 1) { factors.push_back(1); return { "1", factors }; }double sv = sqrt(8.0 * n + 1);int m = int(floor((sv - 1.0) / 2.0));long long Tm = 1LL * m * (m + 1) / 2;int L = n - (int)Tm;if (L == m) {for (int i = 2; i <= m + 1; ++i) factors.push_back(i);BigInt prod = factorial(m + 1);return { prod.toString(), factors };}if (L == m - 1) {for (int i = 3; i <= m; ++i) factors.push_back(i);factors.push_back(m + 2);BigInt prod = factorial(m);prod.multiply(m + 2);prod.divide(2);return { prod.toString(), factors };}for (int i = 2; i <= m + 1; ++i) if (i != (m - L)) factors.push_back(i);BigInt prod = factorial(m + 1);prod.divide(m - L);return { prod.toString(), factors };
}int main() 
{ios::sync_with_stdio(false);cin.tie(nullptr);int n;if (!(cin >> n)) return 0;auto res = maxProductFactors(n);auto& factors = res.second;for (size_t i = 0; i < factors.size(); ++i) {cout << factors[i] << (i + 1 == factors.size() ? '\n' : ' ');}cout << res.first << '\n';return 0;
}

"Maximum Product Over Partitions Into Distinct Parts",

\emph{Journal of Integer Sequences}, Vol. 8 (2005), Article 05.3.3.

源论文:https://cs.uwaterloo.ca/journals/JIS/VOL8/Doslic/doslic33.pdf

http://www.dtcms.com/a/434506.html

相关文章:

  • Java使用easypoi填充数据到word
  • 位运算题3:将整数奇偶位互换
  • 计算机毕业设计 基于EChants的海洋气象数据可视化平台设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
  • 卡盟网站顶图怎么做西安知名的集团门户网站建设公司
  • Python基础入门例程84-NP84 列表中第一次出现的位置
  • 基于腾讯CODING Maven的Android库发布
  • 郑州官方发布班级优化大师
  • 10.2 刷题知识点总结(1) ---- 正则表达式
  • SPI总线介绍
  • 【LeetCode_206】反转链表
  • 品牌网站建设 磐石网络的确好沈阳唐朝网络的服务内容
  • LeetCode 215. 数组中的第K个最大元素
  • 老年实训室建设:筑牢老年护理专业学员的实操能力基础
  • 【深度学习新浪潮】基于Qwen3-8B入门LoRA完整指南
  • 数据库设计与UML图
  • 影视网站的设计与实现新泰程序开发
  • 阿里pdf解析方案Logics-Parsing如何用RL攻克复杂文档解析
  • MySQL 索引失效的常见场景与原因分析
  • 四川省建设厅网站川北医学院网页制作员工作厂家
  • 从直线到环形:解锁栈、队列背后的空间与效率平衡术
  • 操作系统全解析:Windows、macOS与Linux的深度对比与选择指南(AI)
  • 网站建设推广ppt模板网站模版防被偷
  • [创业之路-647]:互联网行业的产业链
  • 甘肃省省经合局网站建设的通知知乎app开发公司
  • 计算机视觉与深度学习 | MASt3R 前馈视觉模型:原理、公式与代码实现全解析
  • 作品展示网站源码贵阳企业网站设计制作
  • 【Linux 系统】命令行参数和环境变量
  • 如何用wordpress建一个网站太原建站模板搭建
  • DNS优选 2.6.3 |解锁专业版,优选最快DNS,享受快速且私密的互联网浏览体验
  • 云浮源峰网站建设工作室地址百度免费咨询