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

P2511 [HAOI2008] 木棍分割

解题思路

这个问题分为两个部分:

第一部分:求最大段长度的最小值(二分答案)

  • 使用二分查找确定最小的最大段长度

  • 对于每个候选值mid,用贪心检查是否能分成最多m+1段(切m刀)

  • 检查时尽量把木棍合并,直到超过mid就开新段

第二部分:求方案数(动态规划)

  • f[j]表示考虑前j根木棍,当前切割段的方案数

  • lef[i]表示以i结尾时,能够满足最大段长度≤ans的最左切割位置

  • 使用前缀和优化DP转移,将O(n²)优化到O(nm)

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N = 2e5 + 10,inf = 0x3f3f3f3f;
    ll n,m,a[N];
    ll L,R;
    ll s[N],f[N],lef[N],sum,mod = 10007;// 检查函数:判断是否能在最大段长度不超过mid的情况下分成不超过m+1段
    bool check(ll mid){ll len = 0,cnt = 1;  // len:当前段长度, cnt:段数计数(初始为1段)for(int i = 1; i <= n; i++){if(len + a[i] > mid){  // 如果当前段加上这根木棍会超过midcnt++;            // 需要新开一段len = a[i];       // 新段从当前木棍开始
            }else len += a[i];     // 否则继续累加到当前段
        }// 判断段数是否不超过m+1(切m刀分成m+1段)if(cnt <= m + 1) return 1;else return 0;
    }int main()
    {cin >> n >> m;// 输入数据并初始化二分边界for(int i = 1; i <= n; i++) scanf("%lld",&a[i]),R += a[i],L = max(L,a[i]);ll ans;// 二分查找:找到最小的最大段长度while(L <= R){ll mid = (L + R) >> 1;if(check(mid)){      // 如果mid可行,尝试更小的值ans = mid;R = mid - 1;}else L = mid + 1;   // 否则需要更大的值
        }// 预处理:计算前缀和和lef数组int top = 0;for(int i = 1; i <= n; i++){a[i] += a[i - 1];   // 将a数组转为前缀和数组// 找到满足a[i]-a[top]<=ans的最小topwhile(a[i] - a[top] > ans) top++;lef[i] = top;       // 记录位置i对应的最左可行切割点
        }// DP计算方案数fill(s,s + 1 + n,1);    // 初始化前缀和数组,s[0]=1表示空序列方案数为1// 注意:循环m+1次,因为可以切0刀到m刀(共m+1种情况)for(int i = 1; i <= m + 1; i++){// 计算f[j]: 前j根木棍,当前切割段的方案数for(int j = 1; j <= n; j++) f[j] = (s[j - 1] - s[lef[j] - 1]) % mod;// 更新前缀和数组s,用于下一轮DPs[0] = 0;for(int j = 1; j <= n; j++) s[j] = f[j] + s[j - 1];// 累加当前切割次数下,分割到第n根木棍的方案数sum = (f[n] + sum) % mod;}cout << ans << " " << sum << endl;return 0;
    }

     

http://www.jsqmd.com/news/45593/

相关文章:

  • 国标GB28181算法算力平台EasyGBS:构建“智慧消防”可视化管理与预警新模式
  • MySQL高级运维核心技术:事务处理、安全管理与性能优化
  • 实用指南:链表-双向链表【node3】
  • Vue中,list集合中包含实体(对象)的列表,存在某个特定的值在实体类属性是否存在常见的方法:
  • 2025年复合涤纶布优质厂家权威推荐榜单:涂层涤纶布/阻燃涤纶布/防水涤纶布源头厂家精选
  • List相关知识点
  • 图文矩阵系统厂家综合测评推荐榜,抖音短视频矩阵/ai排名/短视频矩阵/ai排行榜/ai数字人矩阵/图文矩阵厂家推荐
  • ubuntu22.04 安装OpenSSH-server 支持vscode 远程
  • 2025年工业溶氧仪实力厂家权威推荐榜单:溶氧分析仪/溶解氧分析仪/在线溶解氧分析仪源头厂家精选
  • nacos单机版安装
  • linux top命令配置重置还原
  • Linux中: 通过 iostat 怎么判断硬盘是否存在I/O瓶颈
  • 2025 年便携式 VOC 气体检测仪、气体检测仪厂家十大品牌推荐:精准监测筑牢安全防线,智能传感赋能行业发展
  • RustFS vs MinIO:谁才是国产高性能对象存储之光?
  • SOLID原则在React中的应用实践
  • 绘图工具
  • 深入解析:BERT,GPT,ELMO模型对比
  • 2025 年 11 月离心机厂家推荐排行榜,台式低速大容量离心机,血液离心机,台式低速离心机,台式指针式离心机,台式离心机,小高速离心机,低速微电脑控制离心机,六乘五十毫升离心机,高速离心机公司推荐
  • 2025MathorCup大信息竞赛A题B题选题建议与分析,思路模型
  • Redis更新缓存之双重检查 - 邓维
  • SSH 客户端 MobarXterm 安装和使用笔记
  • 已有ERP和MES,为什么还需要质量管理系统(QMS)?
  • 2025年质量气体流量计直销厂家权威推荐榜单:超微量气体流量计/甲烷气体流量计/小口径气体流量计源头厂家精选
  • SBD3D60V1H-ASEMI可直接替代安世PMEG6010CEJ
  • 机器学习之决策树模型
  • 重庆一对一辅导机构精选推荐,2025合规家教机构口碑排名已公布,附师资实力测评
  • 251119D. mod
  • 2025 年 11 月开关柜厂家权威推荐榜单:高压开关柜,低压开关柜,智能开关柜,配电开关柜公司精选
  • 西门子MES已有质量模块,为何再斥资收购QMS?
  • 2025 年 11 月开关柜供应厂家推荐排行榜,高压开关柜,低压开关柜,配电开关柜,智能开关柜公司推荐