线上OJ 地址: 【02NOIP普及组】过河卒 核心思想: 对于此类棋盘问题,一般可以考虑 dp动态规划、dfs深搜 和 bfs广搜。 解法一:dp动态规划 方法:从起点开始逐步计算到达每个位置的路径数。对于每个位置,它的路径数 等于 左边和上边位置的路径数之和(如果存在的话),同时要考虑到不能走被禁止的位置。 状态转移方程: d p [ i ] [ j ] = d p [ i −
线上OJ: 【04NOIP普及组】火星人 核心思想: 本题的难点是阅读理解。通读后发现,题目的本质是全排列,加上的数字 m ,起始就是调用 m 次 next_permutation() 。 题解代码: #include <bits/stdc++.h>using namespace std;const int N = 10005;int n, m, a[N];int main()
问题分析 这道题属于贪心加回溯。所有操作如果能使得高位的数字变大必定优先用在高位,因为对高位的影响永远大于对低位的影响。然后我们再来分析一下,如何使用这两种操作?对于加操作,如果能使这一位的数字加到9则变成9,否则使这个数字尽量大。对于减操作,如果能使这一位的数字减到9则变成9,否则不采用减操作。然后我们用回溯来分别对该位进行加操作和减操作,记录最大值。时间复杂度大概是 O ( 2 l g
线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid=1947 核心思想: 本题的意思是 在所有的 S i Si Si 中,找一个 S i t Si^t Sit 最早能被 m 1 m 2 m1^{m2} m1m2 整除。 上述若能整除,则说明: 1、 m 1 m1 m1 的质因数肯定是 S i Si Si 质因数的子集
思路:根据数据范围N<=10猜测用DFS+剪枝,因为菜狗不会状压dp。根据题目,一般这种飞机的题都会用到贪心的思想。思想是每架飞机都要卡极限最早降落时间,从而保证后面的飞机能够有充足时间降落。 代码参考博客@MQy大佬有详细解答 #include <bits/stdc++.h>using namespace std;const int N = 10;int n;struct Plan