题面: 题目描述 给你 N 张卡牌, 每张卡牌都有一个面值,你可以在其中选出 m 张,你可以把这几张卡牌按照顺序拼到一起,问你这 m 张卡牌能有多少个不同的数字 比如现在你有 4,14,1 这三张卡牌,你可以拼成 4141,4114,1441,1414,1144 这五个数
输入格式 第一行包括两个个整数 n,m。 第二行包括 n个整数,表示每张卡排的面值。 输出格式 输出能拼成的不同数字有多少种 输入输出样例 输入数据
6 4
12 23 13 1 2 3
输出数据
314
提示
卡牌面值最大为 99
本蒟蒻的代码:
#include<bits/stdc++.h>
using namespace std;
int n , m;
int mark[99999999];
int a[15];
int cnt;
void dfs(int x , int sum){
if(x == m + 1){
if(!mark[sum]){
// cout << sum << " ";
mark[sum] = 1;
cnt++;
}
return ;
}
for(int i = 1 ; i <= n ; i++){
if(a[i] >= 10) dfs(x + 1 , sum * 100 + a[i]);
else dfs(x + 1 , sum * 10 + a[i]);
}
}
int main() {
cin >> n >> m;
for(int i = 1 ; i <= n ; i++){
cin >> a[i];
}
dfs(1 , 0);
cout << cnt;
return 0;
}
样例输出:1060
求各位dalao帮帮笨蒟蒻