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

算法-背包问题

算法思路

尽可能多的获得报酬,很容易想到背包问题,这里 d 是截止时间,那么我们可以用 m 来记录最大的截止时间,然后我们可以把所有物品按照 d 排序,从小到大枚举所有物品就 OK 了

#include<bits/stdc++.h>
using namespace std;
const int N = 5050; // 定义最大工作数量int t[N], d[N], p[N]; // 存储每项工作的耗时、截止时间和报酬
int n, m; // n 是工作数量,m 是最大截止时间
int f[N]; // 动态规划数组,f[j] 表示在时间 j 时可以获得的最大报酬struct node {int t, d, p; // 工作的结构体,包含耗时、截止时间和报酬
};
node a[N]; // 存储工作的结构体数组// 比较函数,按照截止时间从小到大排序
bool cmp(node a, node b) {return a.d < b.d;
}int main() {int k;cin >> k; // 读取测试数据的组数while (k--) {m = 0;cin >> n; // 读取工作数量for (int i = 1; i <= n; i++) {cin >> a[i].t >> a[i].d >> a[i].p; // 读取每项工作的耗时、截止时间和报酬m = max(m, a[i].d); // 更新最大截止时间}sort(a + 1, a + 1 + n, cmp); // 按照截止时间排序for (int i = 0; i <= m; i++)f[i] = 0; // 初始化动态规划数组for (int i = 1; i <= n; i++) {// 倒序遍历时间,确保每个工作只被处理一次for (int j = a[i].d; j >= a[i].t; j--) {// 更新动态规划数组f[j] = max(f[j], f[j - a[i].t] + a[i].p);}}int ans = 0;for (int i = 0; i <= m; i++)ans = max(ans, f[i]); // 找到最大报酬cout << ans << endl; // 输出结果}return 0;
}

 

http://www.xdnf.cn/news/697267.html

相关文章:

  • 火热邀测!DataWorks数据集成支持大模型AI处理
  • 让DeepSeek去除AI痕迹的指令
  • 数据库管理:探寻高效之路
  • webpack打包基本配置
  • 图像融合质量评价指标
  • cmake学习day01
  • [CARLA系列--03]如何打包生成CARLA 0.9.15的非编辑版(地图的加载与卸载)
  • NW845NW850美光闪存颗粒NW883NW889
  • 把数据库做得能扩展:Aurora DSQL 的故事
  • AxumStatusCode细化Rust Web标准格式响应
  • 配置vscode中java.configuration.runtimes
  • Java设计模式之命令模式详解
  • XJTU-SY轴承振动数据集的json自封装
  • 深度学习论文: FastVLM: Efficient Vision Encoding for Vision Language Models
  • Test-Time Zero-Shot Temporal Action Localization
  • 操作系统导论 第38章:廉价冗余磁盘阵列(RAID)
  • 【C/C++】delete nullptr;
  • android系统framework的几个新面试题目(涉及binder,input,SurfaceFlinger带答案)
  • Tomcat运行比较卡顿进行参数调优
  • 案例解读 | 某外资在华汽车系统企业综合运维平台建设实践
  • Java消息队列应用:Kafka、RabbitMQ选择与优化
  • java读取excel数据中字段是否为金额格式
  • vue或者前端适配makedown推荐开源依赖
  • dart常用语法详解/数组list/map数据/class类详解
  • golang 柯里化(Currying)
  • 720全景展示:VR全景的技术原理及应用
  • Python进阶【一】 :线程、进程与协程
  • Vite Vue3 配置 Composition API 自动导入与项目插件拆分
  • 输配电行业国产PLM转型方案:南通禛华电气的云PLM研发转型
  • rsync 如何通过参数加上端口号