B. 长度为n的第k个排列
Problem ID: 7977
Contest ID: 6305
必做题
时间限制:0.2s 空间限制:32M
题目描述:
求 1,2,3,…,n 的字典序第 k 小的排列。
输入格式:
一行两个正整数 n,k
输出格式:
一行表示答案。
样例输入:
3 3
样例输出:
2 1 3
约定:
1≤n≤10, 1≤k≤100
哪位大lao帮我看一下(必给解决方案)
Problem ID: 7977
Contest ID: 6305
必做题
求 1,2,3,…,n 的字典序第 k 小的排列。
一行两个正整数 n,k
一行表示答案。
3 3
2 1 3
1≤n≤10, 1≤k≤100
哪位大lao帮我看一下(必给解决方案)
你准备一个变量来看是第几个排列了然后进行n的全排列当满足条件并且是第k个的时候输出
#include<bits/stdc++.h>
using namespace std;
int n,m,a[20],tt=0;
int b[110][20];
void fun(int x,int y){
if(x==n+1){
if(x==m){
for(int i=0;i<m;i++){
b[tt++][i]=a[i];
}
}return ;
}a[x]=y;
fun(x+1,y+1);
fun(x,y+1);
}int main(){
scanf("%d%d",&n,&m);
fun(0,1);
for(int i=0;i<m;i++){
printf("%d ",b[m][i]);
}return 0;
}
那我这代码该怎么改(调了30分钟)
我感觉完全错误
的确玩全错误
你dfs怎么写的
可是k>n啊
k<100,n<10
哪来的第k小的数啊
是第k个排列
n的全排列个数远不止n个
明白了,谢谢
void dfs(int x)
{
if(x==n+1)
{
t++;
if(t==m) for(int i=1;i<=n;++i) printf("%d ",a[i]);
return;
}
for(int i=1;i<=n;++i)
if(b[i]==0)
{
b[i]=1;
a[x]=i;
dfs(x+1);
b[i]=0;
}
}
这是我的dfs你可以参考一下
谢谢
噢噢
看错了
那没事
你算法几呀这都能看错
我就是单纯的眼瞎
没事了
我就问你算法几
不知道
你怎么可能不知道

自己看,我真不知道
我记得算法三最后才学到动态规划吧
你不会是图灵班的吧