1 条题解

  • -1
    @ 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
上传者