恢复内容开始 1.先上个基础的全排列 #include<iostream> #include<cstring> using nam
基础知识: queue队列的相关用法:先进先出(FIFO)
ACWING板子题地址:https://www.acwing.com/problem/content/description/845/题中已经说的很清楚了,什么叫n皇后。对于一个棋子的摆放,我们应该保证这个棋子所在位置的一列,斜方向和反斜方向没有棋子。怎么判断呢,我们引入bool类型的row[]数组,row[i]=true,表明这一列已经放过棋子了,false表示没有。这个row就解决了列
和ACWING 844基本一样。但是这里要输出路径 我的做法是,pair一个ing[x][y],ing[x][y].first,ing[x][y].second记录x,y的前一个点。因为是逆序,所以又存进一个结构体里,再逆序输出,才变成正序了。#include<iostream>#include<cstdio>#include<cstring&g
地址:https://www.acwing.com/problem/content/846/ 走迷宫,从左上角走到右下角,0可走,1不可走,问最少需要几步。 BFS解法: 通过g[][]记录地图,d[][]初始化为-1用来保证一个点只能走一次以及记录每个点到达终点的距离。 注意:使用以下语句来实现队列记录(x,y);#include<queue>typedef
【问题描述】小蓝要用七段码数码管来表示一种特殊的文字。上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, g。小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符 的表达时,要求所有发光的二极管是连成一片的。例如: b 发光,其他二极管不发光可以用来表达一种字符。例如: c 发光,其他二极管不发光可以用来表达一种字
地址:http://codeup.cn/problem.php?id=5974题目描述已知 n 个整数b1,b2,…,bn以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+1
#include<iostream> #include<cstring> using namespace std; const int maxn=1e3; int vis[maxn]; int p[maxn]; int n; int t=0; void dfs(int x) { if(x==n+1)
子就可以了,只是这里是三维,注意一下细节就行了。刚开始不知道三维怎么读入...... #include<iostream> #include<cstdio> #include<c
地址:https://www.acwing.com/problem/content/848/ 解析:y总先写的是一个无关重心的一个解法。即枚举每一个点,删掉它后,得出的剩余各个连通块中点数的最大值。一:存图邻接表,依然是熟悉的单链表,这里有多个单链表,也就是多个-1点,所以要全初始化为-1无向图,来去各存一次,所以开两倍的e[]和ne[]二:DFS 假设我们要删图中被标
地址:https://www.dotcpp.com/oj/problem1117.html 解析:对于K进制数,每个位置的数是0~k-1的。首先看首位,必不能为0,那么有k-1种选法 。定义idx,表示当前不为0的位置下标。接下来,有两种选择,一个是第二位为0,一个是第二位不为0。如果要第二位为0,那么就把idx+2,跳到第三位,当前数目为(k-1)^2如果第二位不为
地址:https://ac.nowcoder.com/acm/contest/7831/J题意:一串数字,包含1~n,用空格将它们分开,输出任意一种。解析:本来想着,顺序看,先输出<10的,然后是>=10的,对于0特判输出两位。但是有个样例,不行:1011987654321。输出10,1,19,但是很明显,这个串的最大值才11。如果先对n=(len-9)/2+9呢,进行最大值的
地址:https://www.dotcpp.com/oj/problem1433.html中文题意解析:从u->v,如果中间经过的点的被访问次数等于u->v的路线数,便是一个关键点。具体见注释。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e3+50;
地址:https://ac.nowcoder.com/acm/contest/5667/C 题意:给定一个k个节点的无根树,求最少的链覆盖树上的所有边。并输出覆盖方式(链的两边的节点编号)解析:保证每一个边都有被覆盖,肯定与叶子节点有关系。有结论:用最少条链来覆盖一棵树的时候,最优解: (叶子结点数+1) / 2对于叶子结点的求法,可以用vector建图,求叶子结点的dfs序:d
Acwing地址:https://www.acwing.com/problem/content/94/ 看图: 所以就是当前的数,选与不选的问题:1; //选 dfs(x+1); vis[x]=0; dfs(x+1); //不选#include<iostream>#include<cstring>#include<a
地址:https://ac.nowcoder.com/acm/contest/5713/A 解析:n=10,最多是n!种不同的排列方式。所以可以暴力枚举每一种情况:next_permutation();id[]记录每个点的标号,对它进行全排列。d[i][j]表示i点到j点的距离,枚举所有情况。对于每次全排列,求出本排列所得的距离,更新。#include<bits/stdc+
洛谷地址:https://www.luogu.com.cn/problem/P2066 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号