首页 > 其他分享 >P9700题解

P9700题解

时间:2023-10-18 13:14:03浏览次数:42  
标签:minn int 题解 dx2 dy2 棋子 dfs P9700

思路

看数据范围,发现范围很小,直接用搜索

搜索时枚举每个点,如果有棋子就枚举方向,如果这个方向合法,则将剩余棋子数减一,继续搜索。

搜索时参数只需要传当前棋子数就行了。

有以下几点需要注意

  • 多组数据每次需要初始化。

  • 判断是否合法时要注意。

  • 每次记得回溯棋子。

AC CODE

#include<bits/stdc++.h>
using namespace std;
int n,m,k,dx1[4]={-2,0,2,0},dy1[4]={0,-2,0,2},dx2[4]={-1,0,1,0},dy2[4]={0,-1,0,1};
int minn=1e9;
bool a[10][10];
void dfs(int cnt){
	for(int x=1;x<=n;x++){
		for(int y=1;y<=m;y++){
			if(!a[x][y])continue;
			for(int i=0;i<4;i++){
				int nx=x+dx1[i];
				int ny=y+dy1[i];
				if(nx<1||nx>n||ny<1||ny>m||!a[x+dx2[i]][y+dy2[i]]||a[nx][ny]){
					continue;
				}
				a[x+dx2[i]][y+dy2[i]]=0;
				a[x][y]=0;
				a[nx][ny]=1;
				dfs(cnt-1);
				a[x+dx2[i]][y+dy2[i]]=1;
				a[x][y]=1;
				a[nx][ny]=0;
			}
		}
	}
	minn=min(minn,cnt);

}
int main(){
	int T;
	cin>>T;
	while(T--){
		memset(a,0,sizeof a);
		cin>>n>>m>>k;minn=k;
		for(int i=1;i<=k;i++){
			int x,y;
			cin>>x>>y;
			a[x][y]=1;
		}
		dfs(k);
		cout<<minn<<endl;
	}
    return 0;
}

标签:minn,int,题解,dx2,dy2,棋子,dfs,P9700
From: https://www.cnblogs.com/xdh2012/p/17771829.html

相关文章

  • SP26719题解
    考虑动态规划。思路设\(dp_{i,j}\)为\((1,1)\)到\((i,j)\)的方案数,而如果要到这个点,肯定是从左边和上边来。所以递推公式为:\(dp_{i,j}=dp_{i,j-1}+dp_{i-1,j}\)。预处理:将横或纵坐标为1的点赋值为1,因为到达这些点的只有一种方法。注意:每次需要清零数组。ACC......
  • CF1873B题解
    这题其实可以数学方法差小积大解决。差越小积越大,那肯定是让最小的数加一啦。将所有数的积除以最小值再乘上最小值加一。#include<bits/stdc++.h>usingnamespacestd;signedmain(){ intT; cin>>T; while(T--){ longlongcnt=0,n,a[10],minn=LONG_LONG_MAX,ans=1; c......
  • CF1868C Travel Plan 题解
    原题翻译发现所有长度相同的简单路径的权值可能情况相同,且最长的简单路径长度为\(O(\logn)\)级别,考虑维护所有长度的简单路径在一棵树上出现的次数,每种简单路径的权值在所有树上出现的次数,相乘即使答案。我们考虑长度为\(x\)的路径对答案的贡献,考虑枚举这条路径的贡献\(......
  • 【前缀和优化 dp】CF1542E2 Abnormal Permutation Pairs (hard version) 题解
    CF1542E2首先时间复杂度肯定是\(\mathcal{O}(n^3)\)的。容易想到先枚举最长公共前缀,然后枚举\(p_{len+1}\)和\(q_{len+1}\),再枚举逆序对数进行统计。令\(f_{i,j}\)表示有\(j\)个逆序对的\(i\)阶排列的个数。易得转移\(f_{i,j}=\sum\limits_{k=\max(j-i+1,0)}^{j}f......
  • 【根号分治】P9212 「蓬莱人形」 题解
    P9212看到除法相关容易想到根号分治。先对\(x,y\)进行讨论,不妨令\(0\lex,y<m\)。\(x<y\)时,当满足\(a_i+y<m\)或\(a_i+x\gem\)时,即当\(a_i<m-y\)或\(a_i\gem-x\)满足\((a_i+x)\bmodm<(a_i+y)\bmodm\),即\(a_i\bmodm\in[0,m-y-1]\bigcup[m-x,m......
  • 【dp】【竞赛图的性质】ARC163D Sum of SCC 题解
    ARC163D发现这个竞赛图一定能被分为两个集合\(A\),\(B\)。满足\(\forallu\inA,v\inB\),均有\(u\tov\inE\)。答案就是划分这两个集合的方案数。证明:首先,竞赛图缩完点后一定是一条链,对强连通分量进行标号,满足编号小的强连通分量指向编号大的强连通分量。不妨令竞赛图\(G\)......
  • 【dp】【进制】P3464 [POI2007] WAG-Quaternary Balance 题解
    P3464显然的,先将原数变为四进制的数。由于算的是进位/不进位的代价最小值和方案数,容易想到dp。这里假定该四进制数是从高位到低位的,顺序显然是由低位到高位。令\(f_{i,0/1}\)表示第\(i\)位进/不进位的最小代价,\(g_{i,0/1}\)表示的是最小代价下的方案数。转移是简单的......
  • [题解] CF1790E - XOR Tree
    CF1790E-XORTree题意给定一颗无根树,在可以改变任意一个点的点权操作基础上,让树上任意简单路径的异或和不为\(0\),问最少需要多少次操作。思路假设某个点为根,设\(pre_x\)为\(x\)点到根的树上前缀异或和,\(a_x\)为\(x\)的点权,则\(x\)和\(y\)之间简单路径的异或和......
  • [题解]CF514D R2D2 and Droid Army
    思路首先,可以转化题意,找到一个极长的区间\([l,r]\)使得(其中\(mx_i\)表示\([l,r]\)区间中属性\(i\)的最大值):\[\sum_{i=1}^{m}mx_i\leqk\]显然对于这个东西当\(l,r\)发生移动时,是极其好维护的,所以想到双指针。因为\(m\leq5\),所以我们可以直接开\(m\)个ST表......
  • 题解——2023年码谷提高组模拟赛1016
    题解——2023年码谷提高组模拟赛1016一套被各种转来转去的题;参考:https://blog.csdn.net/liuziha/article/details/127353981、https://www.luogu.com.cn/blog/Chen5201314/xiao-nei-bi-sai-1025-zong-jie-ti-xie和https://www.cnblogs.com/Clyfort/articles/0927-test-solutio......