摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3017 题目大意: 有 \(n(\le 30)\) 块硬币(\(n\) 可能是奇数),每块硬币都有一个币值。要求将 \(n\) 块金币分成两堆,使得两堆硬币币值和的差尽可能地小。输出这个最小的差。 解题思 阅读全文
摘要:
题目链接:https://www.luogu.com.cn/problem/P2346 首先需要注意 题目描述 中说道的这句话: 黑白双方交替走棋,任意一方可以先走 然后我这边用的是迭代加深搜索解决的这个问题。 我觉得 迭代加深搜索 结合了 DFS 和 BFS 的优点: 能够像BFS一样进行层次遍历 阅读全文
摘要:
题目链接:https://www.luogu.com.cn/problem/P3110 解题思路: 对 $1,2,n$ 三个点分别求一下最短路(因为是无权图所以可以直接用BFS实现最短路)。 示例代码如下: #include <bits/stdc++.h> using namespace std; 阅读全文
摘要:
题目链接:https://www.luogu.com.cn/problem/P4799 解题思路: 如果暴搜时间复杂度是 \(O(2^{40})\),所以考虑折半搜索。 前一半搜索的时候记录好所有的状态,然后对这些状态对应的价格排序。 后一半搜索的时候到边界条件时用二分确定前一半的数量。 时间复杂度 阅读全文
摘要:
题目链接:https://www.luogu.com.cn/problem/P5691 解题思路: 因为暴搜的时间复杂度为 \(O(150^6)\),所以采用折半搜索(meet-in-middle search)。 我这里用 map 记录 hash,所以总的时间复杂度为 \(O(12 \cdot 1 阅读全文