概述
7.2020国赛javaB组
E 玩具蛇
public class 玩具蛇 {
// 默认都是false
static boolean [][] key=new boolean[5][5];
// 四个方向的移动 上,下,左,右
static int [][]move={{-1,0},{1,0},{0,-1},{0,1}};
static int ans=0;
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 4; j++) {
// 开始点变为ture
key[i][j]=true;
dfs(i,j,1);
key[i][j]=false;
}
}
System.out.println(ans);
}
/**
*
* @param x
* @param y
* @param cur 代表是第走的步数,到了16步,就终止
*/
private static void dfs(int x,int y,int cur)
{
// 终点判断
if(cur==16)
{
ans++;
return;
}
// 朝着四个方向移动 上,下,左,右
for (int i = 0; i < move.length; i++) {
int x2=x+move[i][0];
int y2=y+move[i][1];
/**
要去的点并没有超过临界值,并且没有被访问,那就就说明访问的点是合格的
*/
if(x2>=1&&x2<=4&&y2>=1&&y2<=4&&!key[x2][y2])
{
// 将合格的点标记为访问过的
key[x2][y2]=true;
// 在这个点的基础上,在进行选择
dfs(x2,y2,cur+1);
// 说明这个点应经不是合格的点了,或者说已经到了终点了
// 需要回退,然后换个方向进行
key[x2][y2]=false;
}
}
}
}
I: 补给
https://blog.csdn.net/weixin_45640260/article/details/110252819
J 质数行者
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/*
5 6 1
3 4 1 1 2 1
*/
public class 质数行者 {
static int n,m,w;
static int r1,c1,h1,r2,c2,h2;
// 存放着质数点
static List<Integer> prime;
static int[][][] dp ;
static long Mood = 1000000007;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
m = scanner.nextInt();
w = scanner.nextInt();
r1 = scanner.nextInt();
c1 = scanner.nextInt();
h1 = scanner.nextInt();
r2 = scanner.nextInt();
c2 = scanner.nextInt();
h2 = scanner.nextInt();
prime = new ArrayList<Integer>();
// 所有dp的值都是-1
dp = new int[n+1][m+1][w+1];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
Arrays.fill(dp[i][j], -1);
// 两个陷阱的值为0
dp[r1][c1][h1] = 0;
dp[r2][c2][h2] = 0;
// 访问过的值为1
dp[1][1][1] = 1;
// 得到所有可行的质数
int tem = Math.max(n, m);
tem = Math.max(tem, w);
int j;
for (int i = 2; i <= tem ; i++) {
for ( j = 2; j <= (int)Math.sqrt(i); j++) {
if (i%j == 0) {
break;
}
}
if (j> (int)Math.sqrt(i)) {
prime.add(i);
}
}
// 开始递归,这个点也就是要去的点
System.out.println(dfs(n,m,w));
}
private static long dfs(int x, int y, int z) {
// 这个点被访问或者说是陷阱
if (dp[x][y][z] >= 0) {
return dp[x][y][z] ;
}
long res = 0;
// 对所有质数进行遍历
for (int i = 0; i < prime.size(); i++) {
// if的判断,决定了是否越界
if (x - prime.get(i) > 0) {
// 去下一个点
res = (res+dfs(x-prime.get(i), y, z))%Mood;
}
if (y - prime.get(i) > 0) {
res = (res+dfs(x, y-prime.get(i), z))%Mood;
}
if (z - prime.get(i) > 0) {
res = (res+dfs(x, y, z-prime.get(i)))%Mood;
}
}
// 到了这里,递归已经完成了,这个点将被表记为访问过
System.out.println(dp[x][y][z] = (int) res);
return dp[x][y][z] = (int) res;
}
}
最后
以上就是老迟到树叶为你收集整理的2020年第11届蓝桥杯国赛javaB组的全部内容,希望文章能够帮你解决2020年第11届蓝桥杯国赛javaB组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复