2024睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛) RC-u5 工作安排详解
本文参考 https://www.cnblogs.com/Kescholar/p/18306136


这一题可能对高手来说就能轻而易举的看出是个01背包,但是对于我这种小白还是要经过详细的分析才可以理解。
我们题目要求的是获得的最大报酬,题目的影响因素有三个:工作时长、工作截止时间、对应的报酬,那么怎么样合理的去安排,选什么变量来让他成为一道01背包的题呢?
对于01背包,我们知道,每个物品有各自的重量和价值,我们要在有限的背包容量下,求装入的物品最大价值,每一个我们的dp【i】【j】代表的是前i个物品,当前背包容量为j下的最优解,那么如果我们把i当成前i个工作,把j当前工作的截止时间,那么此时的dp【i】【j】就是做了i件工作,截止时间长度j下的报酬最大值,那么此时就可以模仿01背包的做法来实现了。
对于截止时间,其实就相当于背包当前的体积,我觉得很多人应该会在这里有困惑,所以应该先对截止时间排序,从小到大排完以后,再去进行dp
这是17分的版本,使用二维数组方便理解一点,但是肯定需要滚动数组,不然会卡空间
#include <bits/stdc++.h>
using namespace std;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
struct node{
int t,d,p;
};
int main()
{
//dp[i][j]代表前i个事件,截至时间为j下的最大报酬
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int dp[100][1000];
vector<node>ve(n+1);
for(int i=1;i<=n;i++) cin>>ve[i].t>>ve[i].d>>ve[i].p;
//先按照截至时间来排序,尽可能多的干更多的活
sort(ve.begin(),ve.end(),[](node x,node y){
return x.d<y.d;
});
dp[0][0]=0;//初始化
int res=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=ve[i].d;j++)
{
//如果截至时间小于干这件事的时长 说明这件事不能干
if(j<ve[i].t) dp[i][j]=dp[i-1][j];//最大报酬等于干完上一件事情的报酬
else dp[i][j]=max(dp[i-1][j],dp[i-1][j-ve[i].t]+ve[i].p);
//同理背包
res=max(res,dp[i][j]);
}
}
cout<<res<<endl;
}
}
滚动数组就满分了
#include <bits/stdc++.h>
using namespace std;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
struct node{
int t,d,p;
};
int main()
{
//dp[i][j]代表前i个事件,花了j个时间长度
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int dp[5005]={0};
vector<node>ve(n+1);
for(int i=1;i<=n;i++) cin>>ve[i].t>>ve[i].d>>ve[i].p;
sort(ve.begin(),ve.end(),[](node x,node y){
return x.d<y.d;
});
int res=0;
for(int i=1;i<=n;i++)
{
//滚动数组确保了截止时间大于做完这件事的市场
for(int j=ve[i].d;j>=ve[i].t;j--)
{
dp[j]=max(dp[j],dp[j-ve[i].t]+ve[i].p);
res=max(res,dp[j]);
}
}
cout<<res<<endl;
}
}
2024睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛) RC-u5 工作安排详解的更多相关文章
- socket编程的同步、异步与阻塞、非阻塞示例详解
socket编程的同步.异步与阻塞.非阻塞示例详解之一 分类: 架构设计与优化 简介图 1. 基本 Linux I/O 模型的简单矩阵 每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序 ...
- VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件.本节开始鸡啄米将为大家讲解菜单的概念及使用. 菜单简介 菜单在界面设计中 ...
- --系统编程-网络-tcp客户端服务器编程模型、socket、htons、inet_ntop等各API详解、使用telnet测试基本服务器功能
PART1 基础知识 1. 字节序 网络字节序是大端字节序(低地址存放更高位的字节), 所以,对于字节序为小端的机器需要收发网络数据的场景,要对这些数据进行字节序转换. 字节序转换函数,常用的有四个: ...
- C/C++编程笔记:C语言自增(++)和自减(--)运算符详解,笔记分享
一个整数类型的变量自身加 1 可以这样写: a = a + 1; 或者 a += 1; 不过,C语言还支持另外一种更加简洁的写法,就是: a++; 或者 ++a; 这种写法叫做自加或自增,意思很明确, ...
- 算法编程题积累(1)——网易笔试"工程师工作安排“问题
首先理解题目意思:每个人只能做工作序号表里的一件工作且两个人不能同时做一件工作.AC思路:采用暴力枚举每种可能的分配方案,子问题的解决逐步向上解决了母问题,最终原问题得解. 标程作者:NotDeep( ...
- 并发编程(六)Object类中线程相关的方法详解
一.notify() 作用:唤醒一个正在等待该线程的锁的线程 PS : 唤醒的线程不会立即执行,它会与其他线程一起,争夺资源 /** * Object类的notify()和notifyAll()方法详 ...
- NOI / 1.2编程基础之变量定义、赋值及转换全题详解(5063字)
目录 01:整型数据类型存储空间大小 02:浮点型数据类型存储空间大小
- VS2010/MFC编程入门之三十八(状态栏的使用详解)
上一节中鸡啄米讲了工具栏的创建.停靠与使用,本节来讲解状态栏的知识. 状态栏简介 状态栏相信大家在很多窗口中都能见到,它总是用来显示各种状态.状态栏实际上也是一个窗口,一般分为几个窗格,每个窗格分别用 ...
- 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名
蛮牛杯启动了,大家开始报名! http://cup.manew.com/ 这不是一篇普通的通稿,别着急忽略它.它是一篇可以让你梦想变现的通稿! 从某一天开始,游戏蛮牛就立志要为开发者服务,我们深知这一 ...
- 国内第一本micropython的书出版《机器人Python极客编程入门与实战》
第一本micropython的书<机器人Python极客编程入门与实战>. 购买地址:https://item.taobao.com/item.htm?spm=2013.1.w4018-1 ...
随机推荐
- springboot starter 原理解析及实践
什么是springboot starter starter是springBoot的一个重要部分.通过starter,我们能够快速的引入一个功能,而无需额外的配置.同时starter一般还会给我提供预留 ...
- MySQL如果数据存在则更新,不存在则插入
如果数据存在则更新,不存在则插入,MySQL有duplicate.replace into.replace三种方式如何更新数据? insert ignore into 又是如何插入数据的呢? 准备表和 ...
- C#数据结构与算法入门实战指南
前言 在编程领域,数据结构与算法是构建高效.可靠和可扩展软件系统的基石.它们对于提升程序性能.优化资源利用以及解决复杂问题具有至关重要的作用.今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望 ...
- MakeFile简单示例
简单的Makefile编写学了会点,不学又忘了.这里参考了多位大佬的Makefile教程,自己给自己写的示例,如有错误请告知一下我. #version 1//最简单,没难度 hello : main. ...
- 分圆多项式(cyclotomic polynomial)
最近论文中经常遇到分圆多项式,现在系统的学习一下! 本原单位根 之前介绍n次单位根,现在详细学习一下n次本原单位根(n-th primitive unit root) 一个复数是n次单位根,当且仅当具 ...
- Numa初识
本文分享自天翼云开发者社区<Numa初识>,作者:j****n Numa产生 在二十世纪九十年代被开发出来的. 首次商业化实现基于NUMA的Unix系统的是对称多处理XPS-100系列服务 ...
- Xshell不可以删除,退格^H
文件→属性→终端→键盘,把delete和backspace序列改为 ASCII 127即可.
- Idea无法下载插件或下载插件报错
Plugin Python was not installed: Cannot download 'https://plugins.jetbrains. file -> settings -& ...
- Leetcode 765 情侣牵手 / Hetao-013 翅膀打结 题解 [ 黄 ] [ 并查集 ] [ BFS ] [ 贪心 ]
经典的连通块题,幸好我之前在 leetcode 看过原. 转化 首先观察到一对cp无论是男在前,还是女在前,都视为配对成功,对答案无影响. 因此,我们可以把一对情侣赋同一个编号,直接加一除以二即可. ...
- 删除binlog日志
手动删除 在备库检查正在使用的binlog SHOW REPLICA STATUS 在主库获取binlog列表 SHOW BINARY LOGS 删除备库使用前或主库正在写入前的binlog 不要将正 ...