05 2019 档案
摘要:"题目" 该题目标签是DP,但是其实数据范围可以用记忆化搜索来解决,并且代码实现起来会简单一些,用二分查找来优化。 c++ include using namespace std; int n, k, minn = 2147483647, dp[101000]; multimap m; struct
阅读全文
摘要:"题目" 一道经典的树形dp,其树形DP的原理是递归求解树状结构,并返回已经确立的状态值,形式多为记忆化搜索形式。而树形DP也常常跟其他DP联系起来,这道题就是将树形DP和背包DP联系起来的一道题。 而且该题是01背包,所以要注意i,j的枚举顺序。还要注意j和k的取值范围。 Code c++
阅读全文
摘要:"题目" 博弈论。 考虑先手和后手的关系。然后可以通过统计数值不是0的数的个数来得出答案。 Code c++ include using namespace std; int main() { int n, ans = 0, a[1010]; scanf("%d", &n); for (int
阅读全文
摘要:"题目" 博弈论+贪心。 由于我们是先手,所以我们其实是必赢的,而且其实选完前两次,就已经结束了,因为接下来选的每一次其实都没有我们前几次选的好。而且又因为机器人会把我们想选的最好的拿走,那我们就只能拿走次好的了。然后枚举排序就可以得出答案。 Code c++ include define in
阅读全文
摘要:"题目" 一道很经典的搜索题,可以锻炼搜索的能力,比如可以用dfs覆盖加dp的方式来寻找+更新答案。而且还可以通过在递归中增加数组的方式来辅助搜索。 c++ include using namespace std; int n, k, ans[101000], maxn, tot, a[101000
阅读全文
摘要:"题目" 草鉴定,tarjan可以用来缩点,优化spfa的时间, 缩点之后就是一个DAG了,因此完全可以用来跑spfa上的最长路,然后枚举每条边,查看是否这条边的两个节点分别可以到达起点所在的强连通分量。(因为要返回到1点)。然后更新答案就可以了。 可是为什么要缩点呢,因为只能逆行一次,逆行之后
阅读全文