快速获得时间刺客教程
2025-07-17 11:38:50
发布于:上海
本期帖子我来做一下快速获得时间刺客的教程。众所周知,时间刺客非常难得,需要时间复杂度超越99%的人。
所以开始教程,首先点击acgo左上角题库,进去之后找到知识点那一栏,点击它,然后再点动态规划,选择背包动态规划,进去后划到最底部,点击数字2,在题目里找到宝物筛选点进去,就完成了第一部分。
这道题是一道典型的贪心(其实用01背包也可以,但因为这题范围不大,所以也可以用贪心),但是直接硬写的话时间复杂度非常之高,远远达不到时间刺客的需求,所以对代码进行优化,使得时间复杂度最低。优化代码如下:
#include<bits/stdc++.h>
using namespace std;
struct info
{
int piece;
int weight;
int num;
double everypiece;
};
bool cmp(info a,info b)
{
return a.everypiece>b.everypiece;
}
int main()
{
int n,total,ans=0,now=0;
cin>>n>>total;
info box[n];
for(int i=0;i<n;i++){
cin>>box[i].piece>>box[i].weight>>box[i].num;
box[i].everypiece=box[i].piece/box[i].weight;
}
sort(box,box+n,cmp);
for(int i=0;i<n&&now<total;i++){
int maxTake=min(box[i].num,(total-now)/box[i].weight);
if(maxTake>0){
ans+=box[i].piecemaxTake;
now+=box[i].weightmaxTake;
}
}
cout<<ans;
return 0;
}
我实际上是修改了沙老师(你们可以在这道题的题解里发现这个人,他的代码运行出来编译错误)的代码,如果想要完全理解,我建议去看看沙老师的描述(在题解里可以找到)。
但是,因为刷题人数逐渐增加,我无法保证这段代码可以永久达到100%超越,想看更优化的代码可以关注沙老师,我一定会向他催更的。
以上为快速获得时间刺客的教程,如果有不懂的部分,欢迎在评论区或者我主页提问,我将会回答。
全部评论 9
空间掌握者其实要简单一些
1周前 来自 四川
1确实,我拿空间掌握者还是在用栈做一维数组的题的时候,因为栈的空间复杂度比数组小很多
6天前 来自 上海
0雀食
16小时前 来自 江苏
0
对了有不懂的也可以去问代码原作者沙老师
2025-07-17 来自 上海
16,原作者是NOI导刊
1周前 来自 广东
0有问题吗
6天前 来自 上海
0
有个更简单的做法
找一个没人做的题就好了
16小时前 来自 上海
0说句闲话:DAX你为啥一直是默认的头像,要不改一下?
16小时前 来自 江苏
0懒得改
12小时前 来自 上海
0
要不跟你们说一下我时间,空间是咋得的:
一个俸∑釼蠡的一天,我随便找几题AK我也不知道咋回事,几道题里面有两道题空间和时间超过了100%的用户,我也不知道是为哈16小时前 来自 江苏
06
12小时前 来自 上海
0
我用埃氏筛一次直接获得时空双修
昨天 来自 河北
0其实做一道没人做对过的题就行了(
6天前 来自 上海
0那如果自己也不会做呢
昨天 来自 上海
0好像 普及- 的题有挺多通过率 0% 的
昨天 来自 上海
0是吗,我去看看
12小时前 来自 上海
0
通过不了
1周前 来自 天津
0正常,因为提交人数增加
6天前 来自 上海
0
唐
2025-07-17 来自 浙江
0《时间刺客非常难得》
2025-07-17 来自 浙江
06
2025-07-17 来自 上海
0运用夸张的修辞手法
2025-07-17 来自 上海
0
有帮助,赞一个