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

简单 的部分背包问题(贪心算法)

#include<bits/stdc++.h>
using namespace std;
const int N = 10001;
double m[N];
double v[N];
double Val[N];
double idx[N];
// 按单位价值降序排序的比较函数,起初我直接按照Val进行排序,但是未绑定m[i]Val[i]:排序后重量和单位价值对应关系丢失
bool cmp(int i, int j) {
return Val[i] > Val[j];
}

int main() {
int n;
double t; // 定义为double,避免整数截断
cin >> n >> t;
double Sum = 0;

// 输入数据,计算单位价值
for (int i = 1; i <= n; i++) {
cin >> m[i] >> v[i];
Val[i] = v[i] / m[i]; // 单位价值=总价值/重量
idx[i] = i; // 初始化索引,用于绑定m[i]与Val[i]
}

// 按单位价值降序排序(排序索引而非直接排序Val)
sort(idx + 1, idx + n + 1, cmp);

// 贪心选物品(核心修复:用排序后的索引访问)
for (int i = 1; i <= n; i++) {
int k = idx[i]; // 排序后的第i个物品对应原数组的k号
if (t <= 0) break; // 此时背包已满,提前退出

if (m[k] <= t) {
// 能装下完整物品
t -= m[k];
Sum += v[k]; // 累加加总价值
}
else {
// 此时装剩余部分
Sum += Val[k] * t;
t = 0; // 背包装满,直接退出
}
}

// 输出结果、
printf("%.2lf\n", Sum);
return 0;
}

http://www.cnnetsun.cn/news/1261711.html

相关文章:

  • Kmeans聚类与肘部法确定聚类个数:Matlab实战
  • COMSOL 激光烧蚀3D体热源引力场温度场仿真探索
  • 使用Springboot实现MQTT通信
  • 多智能体事件触发一致性
  • 类内部方法内 写创建对象
  • GraphRAG 完全指南
  • 非计算机专业如何顺利转行网络安全领域?_如何转行网络安全工程师
  • 基于自适应PI的构网型变流器预同步控制策略复现报告
  • 【跨模态一致性增强模块+开源代码】定位与验证:一个提升深度伪造检测的双流网络
  • 如何从bode图得到单位阶跃的趋势
  • 大数据领域 ETL 中的元数据管理策略
  • 企业微信外部客户群自动化管理:建群+群发+踢人一体化
  • 2200 行 Python 桌面应用拆解:架构设计与关键实现细节(周报收取统计)
  • 开源OpenClaw部署指南
  • 广州信号灯厂家售后
  • 2026 年数据库变更审批工具怎么选?NineData 凭什么排进第一梯队
  • 硬核!高精度高可靠性位置检测解决方案 | 编码器/电感式/方案分享
  • 鱼眼相机标定矫正详细步骤
  • 阿里云 ECS 部署 OpenClaw 完整教程(10 分钟快速上手)
  • 吃透 SQL 执行顺序:从根源解决 80% 的 SQL 坑
  • Vector人工智能研究院:传统AI解释方法难以适应智能体时代需求
  • 宜家:对妇女的暴力行为从来都不只是影响妇女。
  • synchronized关键字的底层实现
  • 别被云端AI割韭菜了:90%企业的AI转型都在白花钱
  • 航空造“机”,低空管“域”:数字孪生才是空天产业机域一体的操作系统
  • 道生一,一生二,二生气,气生万物。一到十的物理变化《函谷门》
  • 实测!AiPy + OpenClaw = AI界最佳拍档!
  • 你的ChatBI(问数)准确率不到%?带你深度拆解%准确率的高德ChatBI案例
  • 想用 Claude Code 做 AI 编程,很多人其实卡在了接入这一步
  • 做 AI 测试用例系统时,Prompt、MCP、Agent、Skills、OpenClaw 到底分别是什么?