恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

CCF-CSP 37-2(完全背包问题)

  • 首页
  • 资讯中心
  • /
  • CCF-CSP 37-2(完全背包问题)

相关资讯

14-ONEP系规高定版生成样例(运维服务类)V3.0(重点示例) 2026/8/18 18:36:16
AI开题报告写作工具怎么选?5款主流平台实测对比 2026/8/2 17:09:25
STM32与TPD2015FN实现多路负载智能控制方案 2026/8/2 17:09:30

最新资讯

告别来回拔线:Escrcpy 免费投屏 Android 屏幕到电脑的完整指南
AsmSpy依赖树视图--tree:3分钟读懂多层程序集引用关系
免费离线OCR软件 Umi-OCR 上手指南:截图、PDF、二维码一个下午全搞定
Axure9.0 中继器奇偶行交替变色(斑马纹)教程
Everything拼音搜索插件安装教程:IbEverythingExt快速上手与进阶使用全攻略
ComfyUI 的节点

今日推荐

数据缺失处理:从MCAR、MAR到MNAR的机制解析与多重插补实践
MAGS-SLAM:多智能体协同3D高斯泼溅SLAM系统解析
LLM智能体记忆管理:基于关键词门控的混合激活机制CAMeR详解

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

CCF-CSP 37-2(完全背包问题)

发布时间:2026/8/18 18:37:03
CCF-CSP 37-2(完全背包问题) #includeiostream #includevector #includeunordered_map #includealgorithm//sort排序 using namespace std; //vector数组定义排序 bool compare(pairint, int p1, pairint, int p2) { return (p1.second / static_castdouble(p1.first)) (p2.second / static_castdouble(p2.first)); } int main() { int n, m; cin n m; vectorpairint, int arr; for (int i 1; i m; i) { int cur; cin cur; arr.push_back(make_pair(i, cur));//苹果个数价值 } sort(arr.begin(), arr.end(), compare); int res 0; int step 0; while (n ! 0) { int num n / arr[step].first; cout arr[step].first endl; if (num 0) { step; continue; } n - num * arr[step].first; res num * arr[step].second; step; } cout res endl; return 0; }刚开始的想法是用vector数组以得到价值/投喂个数 作为判断条件价值降序排列以单个苹果价值高的优先考虑样例一能够很好的解决但是样例二得到的结果不正确分析后得到问题这个题目要考虑组合的问题联想到背包问题重新进行解决将苹果个数作为背包容量价值则为价值。​ #includeiostream #includevector using namespace std; int main() { int n, m; cin n m; vectorint arr(m1);//arr[i]存放大小为i的价值 for (int i 1; i m; i) { int value; cin value; arr[i] value; } vectorint dp(n1,INT_MIN);//dp[i]表示容量为i产生的最大价值 dp[0] 0; for (int i 0; i n; i) { if (dp[i] INT_MIN)continue;//还不能拓展到 //在已知最优解的基础上拓展空间 for (int j 1; j m; j) { if (i j n)continue; if (dp[i j] dp[i] arr[j]) { dp[i j] dp[i] arr[j]; } } } cout dp[n] endl; return 0; } ​这里需要注意要从dp[0]开始拓展我开始用的是dp[1] arr[1]拓展但是如果arr[2]arr[1]arr[1]就会出现未考虑的错误情况下面附上回缩式的标准完全背包问题解法#include iostream #include vector #include algorithm #include climits using namespace std; int main() { int n, m; cin n m; vectorint A(m 1); A[0] 0; for (int i 1; i m; i) { cin A[i]; } //dp表示背包容量为n时最大值为多少 vectorint dp(n 1, INT_MIN); dp[0] 0; for (int j 1; j n; j) { for (int i 1; i min(m, j); i) { if (dp[j - i] A[i] dp[j]) { //如果放入i会使最大值增加则更新 dp[j] dp[j - i] A[i]; } } } cout dp[n] endl; return 0; }

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号