#include <iostream> #include <set> using namespace std; int main() { int n; cin >> n; set<int> s; s.insert(0); for (int i = 0; i < n; i ++) { int a;…
url: http://oj.ecustacm.cn/problem.php?id=1455tag: 搜索思路:使用bfs或者dfs。如果使用bfs需要将每次的路径也放入队列中,当搜到终点时,就直接将答案输出。使用dfs需要使用一种记忆化的剪枝技巧,每次判断当前的路径长度 + 1和即将到达的那个点的到那个点的最短的长度比较,如果大于就直接跳过,如果…
url: https://ybt.ssoier.cn/problem_show.php?pid=1638tag:裴蜀定理,拓展欧几里得算法,数论思路:根据题意可以得出,y - x = b d mod n ⇒ b d - a n = y - x。所以可以先求出n与d的最大公约数,如果y - x 不能整除,说明不能到达,如果可以整除再求最小的b。用拓展…
url: http://oj.ecustacm.cn/problem.php?id=1369tag:模拟思路:求字节的二进制表示,其实就是求每个数的补码。对于正数来说,补码就是原码。对于负数来说,先是对原码求反码然后再加1.对于-128来说比较特殊,补码是10000000,通过正常的求法求不出,所以需要特殊判断。代码:#include <io…
url: https://www.luogu.com.cn/problem/P4095tag: 动态规划,背包DP,进制,枚举思路:多重背包问题为基础,做两次01背包,前一次后一次,之后对于每次询问的id就跳过那个id求可能的最大值。代码:#include <iostream> #include <cstdio> #incl…
url: http://oj.ecustacm.cn/problem.php?id=1361tag:数学思路:计算末尾零可以求每个因子中有多少对因子5和因子2,因为2 * 5 = 10,又因为2出现的次数会比5多,因为只要是偶数的情况就会出现因子2.所以只要计算这100个数中,每个数中因子5的个数,然后累加最后输出即可。对于求阶乘来说,如果是某个数…
问题描述小C在学习二进制运算,他了解到每个非负整数都有其二进制表示。例如,整数 5 可以被表示为二进制 "101",整数 11 可以被表示为二进制 "1011",并且除了 N = 0 外,任何二进制表示中都不含前导零。二进制的反码表示是将每个 1 变为 0,每个 0 变为 1。例如,二进制数 "10…
url: http://oj.ecustacm.cn/problem.php?id=1370tag: 动态规划思路:使用动态规划的思想,令 f[i][j] 表示在i层楼内,使用j部手机,在使用最佳策略下,最多的测试次数,换句话说就是在i层楼内,使用j部手机最少需要花费的最大的测试次数。对于只有1部手机的情况来说,有几层就要测试几次。对于0层来说,不…
url: https://www.luogu.com.cn/problem/P2851tag:动态规划,背包DP,进制,USACO,2006思路:可以用背包来做。用 f[i] 表示john付i块钱时最少的硬币数,用 g[i] 表示店主找零i块钱时最少的硬币数,对于f来说,因为硬币数量有限所以需要用多重背包来完成。而对于g来说因为硬币无限多,所以可以…
url: https://www.luogu.com.cn/problem/P4158tag:动态规划,递推,枚举,背包DP思路:用 f[i][j] 表示前i块木板粉刷j次最多的正确次数。用 g[i][j][k] 表示第i块木板粉刷j次粉刷前k个格子时最多的正确次数。用 sum[i][j] 表示第i块木板,前j个格子中需要涂成蓝色的有几个。所以可以…