1 条题解
-
0
自动搬运
来自洛谷,原作者为

H17
* *搬运于
2025-08-24 22:42:58,当前版本为作者最后更新于2022-11-23 10:09:23,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路分析
这道匹配的题,可以让数据选择设备,并且标记上这个设备已经被匹配了。
我们可以使用深度优先搜索实现,把每一种合法排列搜索一遍,第一次输出并标记上,后面搜到就不输出,然后如果没有则输出
-1。代码实现
#include<bits/stdc++.h> using namespace std; int n,k,a[7],b[7],p[7]; //按题目名称定义变量&数组 bool f=1,u[7]; //f用来判断是不是最小的全排列,u数组用来判断是否被使用过 void dfs(int s){ if(s==k+1){ if(f) for(int i=1;i<=n;i++) printf("%d ",p[i]); //字典序最小 f=0; //标记 return; } //边界 for(int i=1;i<=n;i++) if(a[i]-b[s]>=0/*够用*/&&!u[i]/*没用过*/){ p[s]=i,u[i]=1; dfs(s+1); u[i]=0; //标记是否使用过 } //让每次数据匹配一个机器 return; } int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",a+i); for(int i=1;i<=k;i++) scanf("%d",b+i); //输入 dfs(1); //深度优先搜素 if(f) puts("-1"); //没有输出-1 return 0; }
- 1
信息
- ID
- 6601
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者