当前位置: 首页 > 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.zskr.cn/news/1509034.html

相关文章:

  • 2026年6月口碑好的焊管制造商推荐,耐高压弯头/大口径不锈钢焊管/薄壁不锈钢焊管/大口径不锈钢管,焊管加工厂推荐 - 品牌推荐师
  • 如何快速下载抖音无水印视频:面向新手的完整实战指南
  • MATLAB手写三次样条插值函数:带详细注释+可视化示例脚本
  • 2026年成都商铺装修品牌电话实测:口碑与专业度谁更强? - 优质品牌商家
  • 2026年四川LED显示屏市场格局分析:从户外广告到指挥中心的实力供应商盘点 - 优质品牌商家
  • Cursor vibe coding:用自然语言驱动前端原型开发
  • Agent 即服务:下一波云计算的百亿级市场机会
  • 从游戏地图到数据压缩:用C++ vector和二分查找理解离散化的‘空间魔法’
  • 2026年水冷机组市场格局分析:从冷风机到换热器,这些企业值得关注! - 优质品牌商家
  • 2026年单位搬迁公司综合能力分析:从设备配置到项目经验的多维度观察 - 优质品牌商家
  • 终极免费视频下载神器:Tartube一站式管理你的YouTube视频收藏
  • 云创生态最新处置消息:停止兑付后投资者资金损失怎么办?官方通道已开启。
  • 2026年好用的玩具农夫车品牌推荐 - myqiye
  • 如何在Windows 11 LTSC企业版上安装微软商店:3分钟完整解决方案
  • 西北涂料品牌深度评测:甘肃隔热涂料厂家/西北5A康氧漆/西北丙烯酸涂料/西北吸音涂料/西北墙面涂料/西北多彩石砂浆/选择指南 - 优质品牌商家
  • 基于PLC系列S7-1200的鸡饲料自动配比系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_可以扫码或者私信
  • 别让米勒效应烧了你的MOS管!手把手教你优化栅极驱动电路(附实测波形)
  • 信号槽连接失败的 10 种原因及解决方案
  • 别再盲目试工具了!2026这3款热门降AI工具亲测好用,免费指令公开
  • 三步掌握jable视频下载工具:免费保存任何视频的完整指南
  • 2026年,简约酒窖设计定制服务多少钱? - myqiye
  • Roboto字体终极指南:如何在3分钟内实现完美的多语言排版
  • SwinIR-EQ:基于旋转等变性的高效图像超分辨率技术
  • 别小看这颗电阻!手把手教你搞定MOS管驱动电路里的Rg和R1(附计算与选型)
  • 从串口到以太网:手把手拆解SECS-I到HSMS的协议演进与实战配置
  • JavaFX 图片查看器:从文件选择到图片展示
  • JQPlay部署指南:Docker容器化与生产环境配置详解
  • 3步掌握ArchivePasswordTestTool:从加密压缩包到密码恢复的完整实战指南
  • Optuna与Scikit-learn结合:OptunaSearchCV实现高效网格搜索的完整指南
  • COMSOL钒电池三维仿真四合一包:蛇形/交指流道、等温非等温、瞬态浓度演化与二维动态充放电建模