
蓝桥杯ACM算法
C.&H.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
20.动态规划入门总结
原创 2020-11-06 06:55:40 · 91 阅读 · 0 评论 -
19.动态规划例题---青蛙能否从石头0跳到石头n-1(存在型动态规划)
一、题目(存在型动态规划) 输入:石头总数n 每个石头可向右跳跃的步数dis 输出:YES 或 NO 表是否能从石头0到达石头n-1 例如: 输入:5 2 3 1 1 4 输出:YES 二、分析 三、代码 import java.util.Scanner; public class Main { /* 测试数据 * */ static int[] dp; //dp[i]表示能否跳到石头i,...原创 2020-11-06 06:55:09 · 641 阅读 · 0 评论 -
18.动态规划例题---机器人从左上角走到右下角有多少种不同的方式(计数型动态规划)
一、题目 输入: 行m 列n 输出: 多少种不同的方式 例如: 输入: 3 1 输出; 1 二、分析 三、代码 import java.util.Scanner; public class Main { /* 测试数据 * */ static int[][] dp; //dp[i][j]:表示从位置(0,0)到达(i,j)有多少种方式 static int m;//行 static int n;//...原创 2020-11-06 06:54:33 · 1643 阅读 · 1 评论 -
17.动态规划例题及解题步骤---最少硬币组合问题(求最大最小值动态规划)
一、题目: 输入: 第一行:硬币面值数组a 第二行:需组成的金额数m 输出: 组成金额m所需的最少硬币数 例如: 输入: [1,2,5] 11 输出: 3 二、分析:动态规划解题步骤包含四个部分 (1)部分一:确定状态 (1.1)最后一步 (1.2)子问题 (1.3)递归解法 (2)部分二:转移方程 (3)部分三:初始条件和边界情况 (4)第四部分:计算顺序(先计算每次计算都会用到的部分) ...原创 2020-11-05 20:40:38 · 1325 阅读 · 0 评论 -
16. 动态规划概念、特点及解题步骤
一、状态压缩动态规划概念 二、例题1原创 2020-11-05 18:57:53 · 430 阅读 · 0 评论 -
15. 二进制枚举子集(动态规划会用到)---例题李白打酒
一、二进制枚举子集 二、位运算 三、例题1:李白打酒 分析: 代码: import java.util.Scanner; public class Main { /*初始:2斗酒 * 遇店 *2 * 遇花 -1 * (共遇店5次,遇花10次,最后一次遇花,正好把酒喝完) * 把最后一次去掉,只需考虑前14次 * 思路:用二进制每一种可能(1~14) * 然后判断该可能是否满足要求 * * 测试.原创 2020-11-05 10:58:36 · 390 阅读 · 0 评论 -
14.dfs的剪枝策略练习---因数最多的数(未做)
题目: 分析: 求数n的因数个数:(1)先将数n分解成 质数幂次相乘的形式;(例如n=24,24 = 2^3 * 3^1) (2)再把各个幂次加1,相乘。结果即为数n的因数个数 ((3+1)*(1+1)=8) ...原创 2020-11-05 09:59:05 · 163 阅读 · 0 评论 -
13. dfs的剪枝策略练习---正方形
题目: 代码: import java.util.Scanner; public class Main { /* * 思路: * (1)首先计算木棍的总长度sum, * 如果sum%4==0,则说明能构成正方形,且边长s=sum/4 * 否则直接输出No * (2)从第一根棍开始进行dfs(1,0); * dfs(x,k) //x:当前已找到的边数; k:当前搜索到小木棍编号 * 1.如果x==4,即已找到3条边,则ok=true; (ok记录原创 2020-11-05 09:41:37 · 243 阅读 · 1 评论 -
12. dfs剪枝策略练习----蒜头君的旅游计划
题目: 代码: import java.util.Scanner; public class Main { /* * 思路: * (1) 从第一个城市开始进行深度优先搜索:dfs(0,1,0); //三个参数分别表示 当前所在城市,已访问的城市数目,当前花费 * (2)dfs(k,cnt,spend) * 1.剪枝:如果当前花费spend 大于 当前总的最小花费ans,直接return * 2.如果已访问的城市数目=n(访问完所有城市),则获取spend+g原创 2020-11-05 09:01:58 · 354 阅读 · 0 评论 -
11. dfs剪枝策略练习---全排列
代码: import java.util.Scanner; public class Main { /* * 思路: 测试数据 2 正常输出: 2 12 21 * */ static int n;//n static int[] a; public static void main(String[] args){ //1.输入相关值 Scanner sc = new Scanner(System.in); n = sc.nextInt(); a = new...原创 2020-11-05 08:22:40 · 209 阅读 · 0 评论 -
10. dfs剪枝策略练习----找数字
题目: 代码: import java.util.Scanner; public class Main { /* * 思路: 测试数据 2 正常输出: 10 * */ static int n;//N个员工,每个员工只做一项任务 static boolean ok;//标记是否找到解 public static void main(String[] args){ //1.输入相关值 Scanner sc = new Scanner(System.in); n = sc原创 2020-11-05 08:03:05 · 124 阅读 · 0 评论 -
9. dfs---蒜头君开公司(深度遍历每一种可能,寻找最少时间总和)
题目: 分析: 从第0个位置开始,深度遍历每一种可能,寻找最少的时间总和 代码: import java.util.Scanner; public class Main { /* * 思路: 测试数据 6 10 11 12 11 9 11 11 9 10 13 11 12 12 10 11 10 13 9 9 14 9 10 10 11 10 10 9 11 12 11 10 7 10 10 10 8 正常输出: 54 * */ static int n;//N个员工,每个员原创 2020-11-05 07:32:30 · 157 阅读 · 0 评论 -
8.dfs--王子救公主(遍历迷宫,王子和公主访问过同一位置,即成功救公主)
题目: 分析: 和前面的迷宫例题类似,遇到墙则不能通过 (1)分别寻找王子和公主的初始位置 (2)设置一个三维访问数组v[n][m][2]:v[n][m][0]标记王子是否走过、v[n][m][1]标记公主是否走过 (3)分别对王子和公主进行深度优先搜索dfs(当前x,y,0或1),0表示王子,1表示公主 (4)最后遍历访问数组v, 如果存在位置i,j,使得v[i][j][0]和v[i][j][1]都为true(即王子和公主都访问了该位置),则王子和公主肯定...原创 2020-11-05 07:05:51 · 868 阅读 · 1 评论 -
7.dfs---象棋中马的覆盖点
分析: 首先将整个棋盘g初始化为全. 再从初始位置开始深度优先遍历dfs(当前x,当前y,已走步数): (1)先判断当前的x和y下标是否越界; (2)再判断当前已走的步数是否为3; (3)然后将当前位置设置为#,即g[x][y]='#' (4)最后递归访问8个位置 代码: import java.util.Scanner; public class Main { /* * 思路: 测试数据 4 1 2 1 3 2 4 正常输出: 3 1 0 0 * *...原创 2020-11-04 21:46:31 · 200 阅读 · 0 评论 -
6.dfs----家谱
题目: 代码: import java.util.Scanner; public class Main { /* * 思路: 测试数据 4 1 2 1 3 2 4 正常输出: 3 1 0 0 * */ static int n;//家谱中的总人数 static int[][] g;//存放家谱(2列分别表示父母、孩子) static int[] ans;//存放每个人的直系后代数 static int cnt=0;//当前人的后代数 static boolean[原创 2020-11-04 21:02:50 · 200 阅读 · 0 评论 -
5. dfs----最大的蛋糕块(求最大的连通块)
题目: 分析:即求最大的连通块(所包含的格子数最多) 代码: import java.util.Scanner; public class Main { /* * 思路: 测试数据 5 6 .#.... ..#... ..#..# ...##. .#.... 正常输出:2 * */ static int n;//行 static int m;//列 static int cnt=0;//记录当前连通图的格子数 static int ans=0;//记录最大的连通.原创 2020-11-04 19:54:17 · 1051 阅读 · 1 评论 -
4.dfs例题---踏青
题目: 代码: import java.util.Scanner; public class Main { /* * 思路: 测试数据 2 4 ##.. ..## * */ static int n;//行 static int m;//列 static boolean[][] vis;//访问数组 static int[][] t= {{1,0},{-1,0},{0,1},{0,-1}}; public static void main(String[] args){原创 2020-11-04 08:42:42 · 301 阅读 · 0 评论 -
3.剪枝例题---引爆炸弹
题目: 分析: 代码: import java.util.Scanner; public class Main { /* * 思路: 测试数据 5 5 00010 00010 01001 10001 01000 正常输出:2 * */ static int[] row;//标记行列是否已访问 static int[] col; static int n;//行 static int m;//列 static int cnt=0;//记录最少引用的炸弹数 publi.原创 2020-11-04 07:54:00 · 224 阅读 · 0 评论 -
2.奇偶性剪枝
题目: 分析: 代码: import java.util.ArrayList; import java.util.Scanner; public class Main { /* * 最优性剪枝(每次遍历将 多于 当前最优解步数的 直接剪掉) * 问题:找出起点S到终点T的最少步数 测试数据1 4 4 5 S.X. ..X. ..XD .... * */ static char[][] g;//迷宫 static int n;//行 static int m;//.原创 2020-11-03 18:11:03 · 293 阅读 · 0 评论 -
1. 蓝桥杯国赛训练营--深度优先搜索--迷宫游戏
题目: 思路: 代码: import java.util.ArrayList; import java.util.Scanner; public class Main { /* 测试数据1 3 4 S**. .... ***T 测试数据2 5 6 ....S* .***.. .*..*. *.***. .T.... * */ static char[][] g; static int n;//行 static int m;//列 static int[][] v;//访问数原创 2020-10-31 22:30:37 · 207 阅读 · 0 评论