摘要: 传送门 解题思路 从所有攻击力向武器连边,形成二分图,然后枚举攻击力1...10000,如果匹配成功,就继续,否则输出程序结束。 注意: 对于枚举每一个攻击力如果用memset清空vis数组会超时(TLE四个点),所以我们在标记后退出前单个清空(见代码)。 AC代码 1 #include<iostr 阅读全文
posted @ 2020-01-31 18:45 尹昱钦 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 把人当做A类,把座位当做B类,然后二分图匹配,注意所有的数组从一维变成了a[][2],因为每一排有两个座位。 也可以分开求或者每一条边都分解成两条。 AC代码 1 #include<iostream> 2 #include<cstring> 3 using namespace st 阅读全文
posted @ 2020-01-29 22:22 尹昱钦 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 简化一下题面:在 n 个点 m 条正权边的有向图中,共有 n 个⼈要执⾏任务,第 i 个⼈的路线为 1 → i → 1,求最⼩总路程。 这就很显然了,在原图中跑一遍单源最短路,求出所有1->的最短路,然后建一个反图,再跑一遍最短路,求出i到1的最短路,最后把答案加起来。 看看数据范 阅读全文
posted @ 2020-01-20 23:33 尹昱钦 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 dp[i][j]表示以i为根的子树的最小花费。 其中j表示节点i依靠的是哪里放置保安。 j==0:依靠自己 j==1:依靠儿子 j==2:依靠父亲 因为叶子节点不能依靠儿子,所以把所有的叶子节点i的dp[i][1]赋值为最大值。 因为根节点不能依靠父亲,所以最后取答案时为min(d 阅读全文
posted @ 2020-01-20 23:11 尹昱钦 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 贪心策略:对于每一条边,先删除两个端点中权值大的那个点。 证明(感性): 首先,删点其实就等于删边。对于每一条边,假设它的两个端点为a,b且a的权值>b的权值,那么先删a点对答案的贡献为b,先删b点对答案的贡献为a,因为求的是最小值,所以先删权值大的点。 AC代码 1 #inclu 阅读全文
posted @ 2020-01-20 19:55 尹昱钦 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 传送门 题目翻译 解题思路 如果贡献为a[i],大家都会求,而现在变成了乘积的和,怎么求呢? 首先我们观察到n+m为奇数,所以我们可以想到右对角线(左上到右下)。 通过找规律,我们发现,当i+j为奇数时,我们走了偶数步,这时加上乘积(上一步的值*这一步的值); 当i+j为偶数时,我们走了奇数步,这时 阅读全文
posted @ 2020-01-19 20:46 尹昱钦 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 就是一道树形dp的模板。 偷得课件QAQ: 这个题用dp[i][0]表示i不去时以i为根的子树的最大快乐指数, dp[i][1]表示i去时以i为根的子树的最大快乐指数。 然后转移方程就很容易写出来了。见代码。 最后要注意输入的u,v是v是u的上司。 AC代码 1 #include< 阅读全文
posted @ 2020-01-17 20:51 尹昱钦 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 把所有的图读进去后,枚举每一个点,求出从这个点出发所能经过的最远距离,因为只能向低处走,所以其实是一张有向无环图,可以进行记忆话搜索。 AC代码 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int 阅读全文
posted @ 2020-01-16 20:09 尹昱钦 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 传送门 匈牙利算法 匈牙利算法(别名“找对象游戏”),就是给你一个二分图,求最大匹配。 最大匹配就是做多能连多少条边。 我们把这个抽象的概念转化成现实问题——找对象。 男女两组,男生A组,女生B组,每一个男生都有自己喜欢的女生(可能不止一个),作为上帝的你,尽可能的让更多的人成为男女朋友。 怎么做呢 阅读全文
posted @ 2020-01-12 01:33 尹昱钦 阅读(347) 评论(1) 推荐(0) 编辑
摘要: 2019.11.16~2019.11.17 ——第一届CSP(值得载入史册) //咕到了2020年才写的,可能有些地方不太准确,请原谅。 Day0 上午在学校上完文化课,下午就跟着一种的dalao们一同坐车去了日照外国语大学(就是夏令营举办的地点)。 当然是一车的游戏QAQ 又回到了熟悉的校园——熟 阅读全文
posted @ 2020-01-03 21:30 尹昱钦 阅读(294) 评论(1) 推荐(0) 编辑
摘要: 传送门 解题思路 个人认为这根本不是模板,而这题更倾向于LCS在某种特殊情况下的一种优化时间的方法。 真正的模板:LCS模板 这道题就是在两个字符串都是1~n的全排列时可以把时间复杂度从n2优化到nlogn。 把s2中的每一个元素在s1中的位置用一个数组记录下来,然后对这个数组做一遍最长上升子序列( 阅读全文
posted @ 2020-01-02 23:46 尹昱钦 阅读(223) 评论(0) 推荐(1) 编辑
摘要: 传送门 解题思路 很显然的最长公共子序列(LCS)的板子。 定义:用dp[i][j]表示S1前i位和S2前j位的最长公共子序列。 状态转移: 当s1[i]==s2[j]时,dp[i][j]=dp[i-1][j-1]+1; 当s1[i]!=s2[j]时,dp[i][j]=max(dp[i-1][j], 阅读全文
posted @ 2020-01-02 23:38 尹昱钦 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 很显然,把这个字符串倒过来,再与原来的做一个lcs即可。 最后用长度-lcs长度就是答案。 AC代码 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int n,dp[1005][1005]; 5 阅读全文
posted @ 2020-01-02 00:06 尹昱钦 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 首先想暴力做法: 每一次比赛前都sort一遍,然后两两比较,总复杂度为O(R*(n+2n*log(2n))),最大约为1.5*10^8,而且会跑满,所以需要优化。 怎么优化呢? 我们发现这样一条性质: 假设排好序的序列为1,2,3,4(1>2>3>4)。这时进行比赛(1和2,3和4 阅读全文
posted @ 2019-12-27 23:11 尹昱钦 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 很容易我们可以得出结论, 当地板上的玩具数不足k个时,直接放。 当玩具数量等于k时,从地板上拿走的玩具一定是在地板上玩具中,下一次使用昨晚的那一次。 所以我们用一个优先队列存地板上的玩具,重载运算符,比较next[i]的大小。 接下来想一下怎么求next数组。 可以倒着枚举玩具序列 阅读全文
posted @ 2019-12-27 21:03 尹昱钦 阅读(187) 评论(0) 推荐(0) 编辑