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

P1336 最佳课题选择【洛谷算法习题】

P1336 最佳课题选择

网页链接

P1336 最佳课题选择

题目描述

Matrix67 要在下个月交给老师n nn篇论文,论文的内容可以从m mm个课题中选择。由于课题数有限,Matrix67 不得不重复选择一些课题。完成不同课题的论文所花的时间不同。具体地说,对于某个课题i ii,若 Matrix67 计划一共写x xx篇论文,则完成该课题的论文总共需要花费A i × x B i A_i\times x^{B_i}Ai×xBi个单位时间。给定与每一个课题相对应的A i A_iAiB i B_iBi的值,请帮助 Matrix67 计算出如何选择论文的课题使得他可以花费最少的时间完成这n nn篇论文。

输入格式

第一行两个整数n nnm mm,分别代表需要完成的论文数和可供选择的课题数。

接下来m mm行每行两个整数。其中,第i ii行的两个数分别代表与第i ii个课题相对应的时间系数A i A_iAi和指数B i B_iBi

输出格式

输出完成n nn篇论文所需要耗费的最少时间。

输入输出样例 #1

输入 #1

10 3 2 1 1 2 2 1

输出 #1

19

说明/提示

样例说明

4 44篇论文选择课题一,5 55篇论文选择课题三,剩下一篇论文选择课题二,总耗时为2 × 4 1 + 1 × 1 2 + 2 × 5 1 = 8 + 1 + 10 = 19 2\times4^1+1\times1^2+2\times5^1=8+1+10=192×41+1×12+2×51=8+1+10=19。可以证明,不存在更优的方案使耗时小于19 1919

数据规模与约定

对于30 % 30\%30%的数据,n ≤ 10 , m ≤ 5 n\le10,m\le5n10,m5

对于100 % 100\%100%的数据,1 ≤ n ≤ 200 1\le n\le2001n2001 ≤ m ≤ 20 1\le m\le201m201 ≤ A i ≤ 100 1\le A_i\le1001Ai1001 ≤ B i ≤ 5 1\le B_i \le 51Bi5

解题思路

本题属于资源分配类动态规划,是经典的类背包模型。需将总共n nn篇论文分配给m mm个课题,使总耗时最小。定义状态dp[i][j]表示使用前i ii个课题完成j jj篇论文的最小耗时。对于每个课题,枚举其分配的论文数量c cc,根据转移方程dp[i][j] = min(dp[i][j], dp[i-1][j-c] + A[i] * c^B[i])更新状态。初始时仅dp[0][0] = 0,其余设为无穷大。题目数据范围极小(n ≤ 200 , m ≤ 20 n\le200,m\le20n200,m20),三重循环的计算量很低,可轻松求解。最终dp[m][n]就是完成全部论文的最少耗时。

总结

核心逻辑:借助动态规划模拟论文分配过程,枚举每个课题的选取数量,不断维护最小总耗时。
关键操作:定义二维DP状态、计算单个课题对应篇数的耗时、逐层完成状态转移。
效率保障:数据规模小,三重循环运算量低;需注意库函数pow存在浮点精度误差,建议手写整数幂运算规避问题。

代码补充说明

  1. 变量细节:原代码将输入的论文数n nn课题数m mm变量名写反,但转移逻辑未出错,不影响结果。
  2. 精度隐患:pow是浮点函数,计算整数幂可能出现精度偏差,推荐手动循环计算c B i c^{B_i}cBi
  3. 边界初始化:完整写法需将DP数组初始化为极大值,再单独设置dp[0][0] = 0,保证取最小值逻辑正确。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;ll f[21][300],n,m,j,k,A[210],B[210],sum[10000],ans=0;intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll a,b,c,d,e,p;cin>>m>>n;for(a=1;a<=n;a++)cin>>A[a]>>B[a];for(a=1;a<=n;a++){for(b=1;b<=m;b++){for(c=0;c<=b;c++){p=A[a]*pow(c,B[a]);if(f[a][b]==0||a==1)f[a][b]=f[a-1][b-c]+p;elsef[a][b]=min(f[a-1][b-c]+p,f[a][b]);}}}cout<<f[n][m];return0;}
http://www.jsqmd.com/news/997266/

相关文章:

  • 信息学奥赛递推题‘踩方格’的保姆级图解教程:为什么是a[i]=2*a[i-1]+a[i-2]?
  • 手把手教你:在HP服务器上切换RAID卡模式(Smart Array vs HBA/JBOD)
  • 091、动态蛇形卷积 DSConv:管状结构自适应聚焦的几何约束卷积
  • 深度解析 Bun:重新定义 JavaScript 运行时的性能边界
  • MATLAB手写三次样条插值函数:带详细注释+可视化示例脚本
  • Cursor vibe coding:用自然语言驱动前端原型开发
  • 青海彩钢移动厕所技术解析与本土厂家适配指南:西宁楼承板厂家、西宁横挂板价格、西宁横挂板厂、西宁横挂板厂家、西宁琉璃瓦选择指南 - 优质品牌商家
  • 2026年成都商铺装修品牌电话实测:口碑与专业度谁更强? - 优质品牌商家
  • 大模型语义缓存与去重策略:从精确匹配到语义相似度的缓存优化
  • 如何快速下载抖音无水印视频:面向新手的完整实战指南
  • 2026年四川LED显示屏市场格局分析:从户外广告到指挥中心的实力供应商盘点 - 优质品牌商家
  • 2025-2026年正规无动力游乐设备品牌怎么选?基于项目案例与区域服务的多维度分析 - 优质品牌商家
  • Apple Container Machine:把 Linux 搬进 Mac
  • 讲真的2026年大同离婚律师推荐 这5位值得信赖选择 - 本地品牌推荐
  • Agent 即服务:下一波云计算的百亿级市场机会
  • 避开OV5640时钟配置的坑:PCLK算不准?可能是这3个寄存器设错了(附排查清单)
  • UAssetGUI:虚幻引擎资产深度解析与编辑的专业架构设计与实现原理
  • 适配器模式与装饰器模式在日志框架中的实战运用
  • 北京研学机构哪家好?一站式北京研学机构推荐 - 品牌2026
  • AMD Ryzen处理器终极调试指南:免费开源工具SMUDebugTool完整使用教程
  • 舞台灯光师和创客都该知道的DMX512:协议弱点、布线避坑与安全指南
  • 机器学习中的‘距离’与‘相似度’:深入理解欧氏空间、内积与度量矩阵
  • 终极免费视频下载神器:Tartube一站式管理你的YouTube视频收藏
  • 从游戏地图到数据压缩:用C++ vector和二分查找理解离散化的‘空间魔法’
  • Linux用户终极指南:在Linux系统上享受完整哔哩哔哩体验的完整解决方案
  • 2026年水冷机组市场格局分析:从冷风机到换热器,这些企业值得关注! - 优质品牌商家
  • 如何高效使用Adobe-GenP 3.0完整激活Adobe全家桶软件
  • java 注解和反射
  • 2026年单位搬迁公司综合能力分析:从设备配置到项目经验的多维度观察 - 优质品牌商家
  • 云创生态最新处置消息:停止兑付后投资者资金损失怎么办?官方通道已开启。