上一页 1 2 3 4 5 6 7 8 9 10 ··· 27 下一页
摘要: 传送门 解题思路 概括一下题意:求min(sumw/sumn),其中sumw表示一个环上的边权和,sumn表示一个环上点的数量。 这种分数规划问题很常见的一个套路为二分答案,然后转化成01分数规划。 即二分一个比值k,判断有无环满足sumw/sumn<=k,也就是sumw-sumn*k<=0。进一步 阅读全文
posted @ 2021-09-28 20:52 尹昱钦 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先吐槽一下某谷翻译能不能把输入格式也翻译一下,感觉输入格式比题目描述都长。。 观察到p非常小,于是考虑状态压缩,将当前能打的怪物压缩成一个二进制数。 按照每个二进制数分层,一共分得 2^13=8192 层。 边全部存下会MLE,所以考虑在转移的时候判断一下,只有出边的状态是现在状态 阅读全文
posted @ 2021-09-28 17:45 尹昱钦 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 传送门 什么是分层图 在一个图上,按照某种限制,进行分层,在相邻两层之间按照某种联系进行连边。 如何实现 一般有两种方法:二维数组法和状态压缩法。 二维数组法:a[i][j]表示第i层的节点j。 状态压缩法:a[j*k+i]表示第i层的节点j,其中k表示层数。(相当于把二维坐标压成一维。) 应用 在 阅读全文
posted @ 2021-09-28 15:38 尹昱钦 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 众所周知,spfa已死。 我们能做到的,只是尽可能的优化一点,减少被卡死的情况。 SLF优化 SLF:即 Small Label First,就是每次进队元素跟队首比较,若dis大于队首元素,则将其插到队尾,否则插到队首。 LLL优化 LLL:即 Large Label Last,每次进队元素的di 阅读全文
posted @ 2021-09-28 11:43 尹昱钦 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 关于spfa,他死了 显然是差分约束。每日背规律: 小于等于最短路,求出上界最大值; 大于等于最长路,求出下界最小值。 于是建立大于等于的关系,spfa跑一遍最长路,判断有无正环,最后答案就是各个dis之和。 为保证都为正整数,需要从超级源点0向其他所有点建立一条边权为0的边。 ~ 阅读全文
posted @ 2021-09-28 09:15 尹昱钦 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 分数规划问题:最大化比值。 可以枚举流量,再dijkstra跑最短路求出费用,更新答案。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> # 阅读全文
posted @ 2021-09-27 19:36 尹昱钦 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 概括一下题意: 求所有点两两之间最短路的条数和经过k点的最短路的条数。 可以用Floyd边求边维护。 和Floyd本身一样不是很好感性理解,越深想越感觉可能落下或者多算。 要注意最短路条数f[i][i]不能初始化为1.否则当k==i松弛时会多算。 AC代码 #include<ios 阅读全文
posted @ 2021-09-27 19:08 尹昱钦 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 传递闭包板子题。 直接建边然后Floyd即可。 最后对于每一个点,若比他小的(ma[i][j])加上比他大的(ma[j][i])等于n-1,则他可以确定排名。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #i 阅读全文
posted @ 2021-09-27 18:00 尹昱钦 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 感觉还是蛮有难度的。 设dp[i][j]表示释放编号在区间i..j的犯人所需要的肉的数量。 一开始枚举最后一个释放的人k进行转移,结果发现wa了,为什么? 深入分析一下,发现不满足无后效性,即未来的决策会影响现在的答案。 因为k左右两边的转移是相互影响的。 而当我们枚举的k的意义变 阅读全文
posted @ 2021-09-27 16:40 尹昱钦 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 传送门 总结 被D题卡了卡好久。。 做了ABCDF,E题到最后也没推出来,唉还是太菜了呜呜呜。 A-F题解 A可以直接暴力枚举。 B题进制转换注意开long long。 C题注意是大于还是大于等于。 D题记忆化搜索或者dp即可。 E题从根节点向下分治+分类讨论+数学推导。 F题换根dp板子。 GH题 阅读全文
posted @ 2021-09-27 16:04 尹昱钦 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 我们发现到某一位时,前面擦去那些数字并不影响当前位,影响的只有前面擦去的数量。 设dp[i][j]表示到第i个数共擦去j个数的答案。 则dp[i][j]=max(dp[i-1][j-1],dp[i-1][j]+(i-j==a[i])); 最后答案就是max(dp[n][j])。 A 阅读全文
posted @ 2021-09-26 16:54 尹昱钦 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 本题从暴力dfs入手,推出dp转移方程。 先进行排序,速度越大编号越大。 假设齐王从最大开始的出马,dfs(now,l,r)表示齐王出到编号为now的马,田忌还剩下l-r之间的马(因为田忌一定是要么出最大的马,要么出最小的马)。 分类讨论,当田忌最大的马大于齐王,则一定拿下这场比赛 阅读全文
posted @ 2021-09-26 16:31 尹昱钦 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 今天拿下好几发最优解,对卡常有了很大的感悟。 尽量少用数组访问地址不连续的值,尽可能用单个变量在求解的for循环中读入并求解。 stl不开O2是真的慢,手写封装的数据结构也是蛮好看的。 取模运算非常慢,如果开long long可以少取几次模,那非常划算。 阅读全文
posted @ 2021-09-26 15:08 尹昱钦 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 洛谷传送门 解题思路 把有馅的面包的数量看做ai/ci,就转化成了多重背包的板子。 为了练习熟练度,于是使用单调队列优化多重背包。 本以为肯定是最优解,没想到竟被一个直接暴力拆成01背包的干翻了。。 不能放弃,于是就手写双端队列,再交了一遍,把它干翻了,拿到了最优解。 AC代码 #include<c 阅读全文
posted @ 2021-09-26 15:05 尹昱钦 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 首先可以发现,无论怎么变,字母的和是不变的。 而且每个位置是多少都行(只要和别超)。 用dp[i][j]表示前i位的和为j的方案数。 然后枚举第j位可能情况(0~25),从dp[i-1][j-k]转移过来即可。 一种思路是先预处理这个dp数组,然后回答询问。 另一种思路是离线处理, 阅读全文
posted @ 2021-09-26 09:32 尹昱钦 阅读(49) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 27 下一页