1.22

news/2025/1/22 18:02:04/文章来源:https://www.cnblogs.com/Mikkeykarl/p/18686555

P1123 取数游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 本题一开始是想写双for循环,复杂度\(O(n^n)\),不出意外T了三个点,然后思考剪枝,考虑到不需要重新找,做了一个bool数组来标记,防止重新搜索已经出现过的方案,过了第四个点。

  • 后面看了题解后,发现这一思路极好,枚举整个棋盘,每个点可以选也可以不选,则复杂度直接降为\(O(2^n)\),直接ac,根本不用剪枝

package shuati;import java.io.*;
import java.util.*;public class Main {static StreamTokenizer cin = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));static Scanner scanner = new Scanner(System.in);static PrintWriter cout = new PrintWriter(new OutputStreamWriter(System.out));static int t, n, m;static final int N = 10;static int[][] g = new int[N][N];// cnt[i][j] 表示以(i,j)为中心的周围八个格子有几个数被选取static int[][] cnt = new int[N][N];static int ans, nowans;static int dx[] = {0, 1, 1, 0, -1, -1, -1, 0, 1};static int dy[] = {0, 0, 1, 1, 1, 0, -1, -1, -1};public static void dfs(int x, int y) {// 处理越界if(y == m + 1) {dfs(x + 1, 1);return;}if(x == n + 1) {ans = Math.max(nowans, ans);return;}// 不选择这个点dfs(x,y + 1);if(cnt[x][y] == 0) {for(int i = 0; i < 9; i++) {cnt[x + dx[i]][y + dy[i]]++;}nowans += g[x][y];dfs(x, y + 1);nowans -= g[x][y];for(int i = 0; i < 9; i++) {cnt[x + dx[i]][y + dy[i]]--;}}}public static void solve() throws IOException {for (int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++) {cin.nextToken();g[i][j] = (int) cin.nval;}}dfs(1, 1);cout.println(ans);cout.flush();}public static void main(String[] args) throws IOException{cin.nextToken();t = (int) cin.nval;while(t-- != 0) {cin.nextToken();n = (int) cin.nval;cin.nextToken();m = (int) cin.nval;ans = 0;nowans = 0;solve();}}
}

深さ優先探索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 经典搜索
import java.io.*;
import java.util.*;public class Main {static StreamTokenizer cin = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));static Scanner scanner = new Scanner(System.in);static PrintWriter cout = new PrintWriter(new OutputStreamWriter(System.out));static final int N = 510;static int n, m;//长和宽static char[][] g = new char[N][N];static boolean[][] str = new boolean[N][N];static int[] dx = {1, 0, -1, 0};static int[] dy = {0, 1, 0, -1};static int cnt;public static void dfs(int x, int y) {if(g[x][y] == 'g') {cnt = 1;cout.print("Yes");return;}for(int i = 0; i < 4; i++) {int nowx = dx[i] + x;int nowy = dy[i] + y;if(nowx >= 1 && nowx <= n && nowy >= 1 && nowy <= m) {if(str[nowx][nowy] == false && g[nowx][nowy] != '#' && cnt == 0) {str[nowx][nowy] = true;dfs(nowx, nowy);}}}}public static void main(String[] args) throws IOException{
//		cin.nextToken();
//		n = (int) cin.nval;
//		cin.nextToken();
//		m = (int) cin.nval;n = scanner.nextInt();m = scanner.nextInt();int chux = 0;int chuy = 0;for(int i = 1; i <= n; i++) {String s = scanner.next();for(int j = 1; j <= m; j++) {g[i][j] = s.charAt(j - 1);if(s.charAt(j - 1) == 's') {chux = i;chuy = j;}}}str[chux][chuy] = true;dfs(chux, chuy);if(cnt == 0) {cout.print("No");}cout.flush();}
}

P1706 全排列问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 水题
import java.io.*;
import java.util.*;public class Main {static StreamTokenizer cin = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));static PrintWriter cout = new PrintWriter(new OutputStreamWriter(System.out));static int n;static boolean[] str = new boolean[10];static Queue<Integer> myQueue = new LinkedList<>();public static void dfs(int cnt) {if(cnt == n) {for (Integer i : myQueue) {cout.print("    " + i);}cout.println();cout.flush();return;}for(int i = 1; i <= n; i++) {if(str[i] == false) {str[i] = true;cnt++;myQueue.add(i);dfs(cnt);myQueue.remove(i);cnt--;str[i] = false;}}}public static void main(String[] args) throws IOException{cin.nextToken();n = (int)cin.nval;dfs(0);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873356.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode使用之go语言配置

时间:2025/1/22 扩展:go 目的:支持go语言,方便安装其他必备插件安装该扩展包后可以执行该扩展包提供的命令Go:Install/Update Tools来进一步扩展go工具执行命令的窗口可以通过Ctrol+Shift+P调出点击后会出现很多选项,可以根据自己需要勾选然后点击确定,等待下载安装,一般情…

VSCode设置之默认在当前文件目录下打开终端

在vscode界面依次点击“文件”→“首选项”→“设置”→“用户”→“功能”→“终端”,找到Integrated:Cwd选项,将其值修改为”${fileDirname}“,即可在所有打开的工程内实现终端默认在当前文件的路径启动

树上的轮廓线DP!——AGC017F Zigzag

树上的轮廓线DP!——AGC017F Zigzag 注意到 \(n,m\le 20\),考虑状压,设 \(f_{i,S}\) 表示对于第 \(i\) 条线,其路线为 \(S\) 的方案数。 转移需要枚举 \(f_{i-1,S}\) 复杂度 \(\mathcal O(4^n\text{poly}(n))\)。 发现这种相邻状态之间的限制很像矩形中行的扩展,于是我们可…

使用 CSS flex(横向) 实现瀑布流布局(需要后端配合数据分左右)

核心代码(提供思路)<up-waterfall v-model="flowList"><template v-slot:left="{leftList}"><view v-for="(item, index) in leftList" :key="index"><!-- 这里编写您的内容,item为您传递给v-model的数组元素…

htb LinkVortex walkthrough

nmapnmap -p- -A -sS -T 4 10.10.11.47 Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-22 00:58 UTC┌──(root㉿kali)-[/home/ftpuserr] └─# nmap -p- -A -sS -T4 10.10.11.47 Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-22 00:58 UTC Stats: 0:02:28 ela…

网络抓包文件太大,如何切分

背景 节前最后几天了,随便写点水文吧,今天就记录一下,当我们拿到的网络抓包文件太大,应该怎么分析。 一般来说,我们个人抓包的话,linux上用tcpdump比较多,抓的时候也会用捕获表达式,抓出来的包一般不大,用wireshark分析就很容易。 但是,前一阵的一个晚上,dba突然找我…

java进程内存占用分析

一、背景 1.1 问题描述 不知道大家在开发过程中有没有遇到过类似的问题,明明通过JVM参数-Xmx256m设置了最大堆内存大小为256m,但是程序运行一段时间后发现占用的内存明显超过了256m,却并没有出现内存溢出等问题,那是什么东西占用了额外的内存空间呢? 通过ps查看java进程项…

《ESP32-S3使用指南—IDF版 V1.6》第三章 ESP32-S3基础知识

第三章 ESP32-S3基础知识 1)实验平台:正点原子DNESP32S3开发板 2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6 3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp3…

GDB - 查看崩溃程序maps映射表

可执行程序如何通过gdb查看映射信息? 在终端中打开gdb调试器:gdb 可执行文件名。 进入gdb调试器后,使用命令info proc mapping查看可执行程序的映射信息。 这个命令将会输出可执行程序的内存映射信息,包括可执行文件的代码段、数据段、堆和栈等信息,以及共享库的地址空间等…

Anthropic 计划为 Claude 发布「双向」语音模式;商汤「日日新」实时音视频对话服务开放商用丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

记录---当window.open被ios安全机制拦截,我掏出3种方案,终于跳转成功!

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣一、前言 今天在开发H5的时候,遇到了一个bug,就是在ios环境,在某些情况下执行window.open不生效,所以正好趁此机会研究了一下window.open。 二、window.open介绍 从open方法的调用方式可以看出,open方法是定义在Wind…