1 条题解
-
-1梦萦枯野 LV 8 @ 2019-01-01 15:13:01
由于每个字母都只用一次,且字母的分数都不同,所以用分数前N大的字母组成名字。
组成名字是全排列。可以用深搜。#include<iostream> #include<vector> #include<algorithm> #include<string.h> #include<string> using namespace std; const int base='a'; string possi; vector<char> charset(26); vector<string> ans; int score[26]; bool used[26]; int N; void dfs(int); bool cmp_sco(char a,char b) { return score[a-base]>score[b-base]; } int main() { cin>>N; for (int i=0;i<26;i++) charset[i]=i+base; for (int i=0;i<26;i++) cin>>score[i]; sort(charset.begin(),charset.end(),cmp_sco); charset.resize(N); possi.resize(N); memset(used,false,sizeof(used)); dfs(0); sort(ans.begin(),ans.end()); for (int i=0;i<ans.size();i++) cout<<ans[i]<<endl; return 0; } void dfs(int dep) { if (dep==N){ ans.push_back(possi);return; } for (int i=0;i<N;i++) { if (used[i]) continue; used[i]=true; possi[dep]=charset[i]; dfs(dep+1); used[i]=false; } }
- 1
信息
- 难度
- 5
- 分类
- (无)
- 标签
- (无)
- 递交数
- 72
- 已通过
- 23
- 通过率
- 32%
- 被复制
- 4
- 上传者