Table of Contents
P.S.:挑战3个月冲击省一的第13天,当前阶段:动态规划之背包问题;
今日概述:
1.修了kali
2.打了3个CTF弱智题
3.完成了1个题目
取模的学习:
干了一篇blog,这里不再贴了
CTF之index.php.bcp泄露:
writeup我就不写了,这道题很弱智;
主要是检查一下我的Kali Linux是否可用
第一题:# P1455 搭配购买
难度:提高-
题目描述
明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某个网站上有卖云朵的,小朋友们决定一同前往去看看这种神奇的商品,
这个店里有 \(n\) 朵云,云朵已经被老板编号为 \(1,2,3,...,n\),并且每朵云都有一个价值,
但是商店的老板是个很奇怪的人,他会告诉你一些云朵要搭配起来买才卖,也就是说买一朵云则与这朵云有搭配的云都要买,
电脑组的你觉得这礼物实在是太新奇了,但是你的钱是有限的,所以你肯定是想用现有的钱买到尽量多价值的云。
输入格式
第一行输入三个整数,\(n,m,w\),表示有 \(n\) 朵云,\(m\) 个搭配和你现有的钱的数目。
第二行至 \(n+1\) 行,每行有两个整数, \(c_i,d_i\),表示第 \(i\) 朵云的价钱和价值。
第 \(n+2\) 至 \(n+1+m\) 行 ,每行有两个整数 \(u_i,v_i\)。表示买第 \(u_i\) 朵云就必须买第 \(v_i\) 朵云,同理,如果买第 \(v_i\) 朵就必须买第 \(u_i\) 朵。
输出格式
一行,表示可以获得的最大价值。
说明/提示
- 对于 \(30\%\) 的数据,满足 \(1 \le n \le 100\);
- 对于 \(50\%\) 的数据,满足 \(1 \le n, w \le 10^3\),\(1 \le m \le 100\);
- 对于 \(100\%\) 的数据,满足 \(1 \le n, w \le 10^4\),\(0 \le m \le 5 \times 10^3\)。
WriteUp:
21:30 start
R 仍然是按照我们的惯例,简化一下题目:
给定n个物品,共有m种搭配,搭配的物品必须一起购买,一共w元,最多可以买多少的物品
T 如果去除搭配,这就是普通的01背包,所以接下来的重点就是如何处理搭配问题
T 一个显然的做法是:将这几个物品视为一个,价值和价钱均为各个子物体的和;
T 但是,问题在于,多物品会互相捆绑,如何最后视作一个;
T 如果我对图论的印象没错的话,这里可以建图,随后强联通分量,但是我已经一年没打过图论了,因此不考虑(而且今天的训练目标是01背包)
T 这玩意跟那个apt(超级牛力的apt)似的,就是处理依赖
T 显然需要一个去重的东西,这让我想到了并查集,但是。。。我不会写(蒟蒻本蒻)
T 那就用set吧,不用白不用;
T 我们给每个物品都开一个set,而后遍历set中的所有成员,将他们的set也加入进来;
T 下一个问题是:可能有环,我们这里就不能再怎么做了;
T 再想想别的做法呢?
T 仍然是建图(都是双向的,等于无向图),随后对每个未访问点执行一遍dfs,将其加入这个点的依赖关系数组,标记已访问(这里不会出现环无法处理的情况,因为起始节点已标记)
T 完成之后做一遍01背包即可;
E AC,27min(当然,代码是AI写的,我没这么多时间了,得睡觉,不过思路没什么问题)
今日总结:
1.CTF真好玩
2.Kali真帅
3.独立思考出来一个提高-的题目,朕甚是欣慰啊
4.图论得学