专栏文章
题解:P8838 [传智杯 #3 决赛] 面试
P8838题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioymjaj
- 此快照首次捕获于
- 2025/12/03 03:17 3 个月前
- 此快照最后确认于
- 2025/12/03 03:17 3 个月前
前言:本文原创,请勿抄袭。
现在有 个服务器,服务器 最多能处理 大小的数据。
接下来会有 条指令 ,指令 表示发送 的数据,需要你分配一个空闲的服务器。
请你算出一个序列 表示指令 的数据分配给服务器 ,且 的字典序最小;如果无法分配,输出
-1。对于所有数据,,。
首先看数据范围,对于所有数据,,。那么,数据范围特别特别的小,而且考虑到需要分配,就可以采用我们的搜索。在这里,肯定用深度优先搜索。搜索的东西就是需要分配的东西 。当然,不是所有的 都可以。在这里,如果 才能分配,因为要有这个能力才可以啊。最后,我们只输出第一个答案即可,用个变量标记有没有答案即可。
CPP#include<bits/stdc++.h>
using namespace std;
const int maxn=15;
int n,k;
int a[maxn],b[maxn];
bool vis[maxn],flag=0;
int id[maxn];
void dfs(int x){
if(x>k){
if(!flag){
for(int i=1;i<=k;i++){
cout<<id[i]<<" ";
}
}
flag=1;
return ;
}
for(int i=1;i<=n;i++){
if(a[i]>=b[x]&&vis[i]==0){
vis[i]=true;
id[x]=i;
dfs(x+1);
id[x]=0;
vis[i]=0;
}
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=k;i++){
cin>>b[i];
}
dfs(1);
if(flag==0){
cout<<-1;
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...