当前位置: 首页 > 编程笔记 >

C ++中字母构成的最大分数词

欧阳衡
2023-03-14
本文向大家介绍C ++中字母构成的最大分数词,包括了C ++中字母构成的最大分数词的使用技巧和注意事项,需要的朋友参考一下

假设我们有一个单词列表,一个字母列表和每个字符的分数。我们必须找到使用给定字母组成的任何有效单词集的最大分数。

我们可能不会在字母中使用所有字符,并且每个字母只能使用一次。字母“ a”,“ b”,“ c”,...,“ z”的得分分别由得分[0],得分[1],...,得分[25]给出。

因此,如果输入像单词= [“ god”,“ good”,“ toc”,“ cat”],字母= [a,g,o,o,d,d,d,c,t,t]和分数= [5,0,8,3,0,0,6,0,0,0,0,0,0,0,3,0,0,0,0,2,0,0,0, 0,0,0],则输出将为30,此处good和cat得分最高。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个2D数组dp

  • 定义一个函数calc(),它将使用s,一个映射m,一个数组sc,

  • 回答:= 0

  • 对于初始化i:= 0,当i <s的大小时,更新(将i增加1),执行-

    • 返回0

    • x:= s [i]

    • 如果m [x] <= 0,则-

    • (将m [x]减1)

    • ans:= ans + sc [x-'a']

    • 返回ans

    • 定义一个函数solve(),它将接受i,状态,成对的v数组,一个映射m,一个数组s,

    • 如果i与-1相同,则-

      • 返回0

    • x:= .v [i]的第二个值

    • 回答:= 0

    • 如果状态与1相同,则-

      • ans:= calc(x,m,s)

    • 如果ans> 0并且状态等于1,则-

      • (将m [x [j]]减1)

      • 对于初始化j:= 0,当j <x的大小时,更新(将j增加1),执行-

    • 返回ans +求解(i-1,0,v,m,s)和求解(i-1,1,v,m,s)的最大值

    • 从主要方法中,执行以下操作-

    • 回答:= 0

    • 定义一张映射

    • 对于初始化i:= 0,当i <l的大小时,更新(将i增加1),执行-

      • (将m [l [i]]增加1)

    • 定义成对的数组v

    • 对于初始化i:= 0,当i <w的大小时,更新(将i增加1),执行-

      • 在v的末尾插入{flag,x}

      • x:= w [i]

      • 标志:= calc(x,m,s)

      • 如果flag不为零,则-

    • 对数组v排序

      dp:=定义一个2D数组,大小为(v的大小)x 2,并用-1填充

      返回最大的solve(v,0,v,m,s的大小)和solve(v,1,v,m,s的大小)

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       vector<vector<int> > dp;
       int calc(string s, map<char, int> m, vector<int>& sc){
          int ans = 0;
          for (int i = 0; i < s.size(); i++) {
             char x = s[i];
             if (m[x] <= 0)
                return 0;
             m[x]--;
             ans += sc[x - 'a'];
          }
          return ans;
       }
       int solve(int i, int status, vector<pair<int, string> > v,
       map<char, int> m, vector<int>& s){
          if (i == -1)
             return 0;
          string x = v[i].second;
          int ans = 0;
          if (status == 1)
             ans = calc(x, m, s);
          if (ans > 0 && status == 1) {
             for (int j = 0; j < x.size(); j++) {
                m[x[j]]--;
             }
          }
          return ans + max(solve(i - 1, 0, v, m, s), solve(i - 1, 1, v, m, s));
       }
       int maxScoreWords(vector<string>& w, vector<char>& l,
       vector<int>& s){
          int ans = 0;
          map<char, int> m;
          for (int i = 0; i < l.size(); i++)
             m[l[i]]++;
          vector<pair<int, string> > v;
          for (int i = 0; i < w.size(); i++) {
             string x = w[i];
             int flag = calc(x, m, s);
             if (flag) {
                v.push_back({ flag, x });
             }
          }
          sort(v.begin(), v.end());
          dp = vector<vector<int> >(v.size(), vector<int>(2, -1));
          return max(solve(v.size() - 1, 0, v, m, s), solve(v.size() -
          1, 1, v, m, s));
       }
    };
    main(){
       Solution ob;
       vector<string> words = {"god", "good", "toc", "cat"};
       vector<char> letters = {'a','g','o','o','d','d','d','c','t','t'};
       vector<int> score = {5,0,8,3,0,0,6,0,0,0,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0};
       cout << (ob.maxScoreWords(words, letters, score));
    }

    输入项

    {"god", "good", "toc", "cat"},
    {'a','g','o','o','d','d','d','c','t','t'},
    {5,0,8,3,0,0,6,0,0,0,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0}

    输出结果

    30
     类似资料:
    • 问题内容: 有没有一种方法可以限制Django Haystack索引中边缘ngram的大小?例如,我创建ngram如下: 但我不想创建2个字母ngram,实际上我想将最小设置为4或5。 作为背景,我使用的是django-haystack / elasticsearch,并在heroku上使用了盆景。 问题答案: 您需要做的是覆盖Haystack的ElasticSearch后端中的搜索映射。 简而言

    • 朋友们,可以在一个正则表达式中验证特殊字符的最小值、大写字母的最小值和数字的最小值吗? 字符串示例: 我想要的是: 我想要一个正则表达式来验证至少2个特殊字符、2个数字和2个大写字母

    • 问题内容: 我想将这个大字符串分成几行,每行中的内容不应超过MAX_LINE_LENGTH个字符。 到目前为止我尝试过的 输出: 它造成 断字 。我不要这个 而不是我想要这样的输出: 添加了另一个条件: 如果单词长度大于MAX_LINE_LENGTH,则该单词应拆分。 解决方案应该没有外部罐子的帮助。 问题答案: 只需逐个单词地遍历字符串,并在单词超过限制时中断。 我只是以徒手的方式输入了该内容,

    • 函数名称:大写字母转成小写 函数功能:将所有大写字母转成小写 函数方法 str2 = string.lower(str1) 参数 类型 必填 说明 str1 string 是 需要转换的内容 返回值 类型 说明 str2 string 转换成大写后的内容 函数用例 str1="JUST DO IT" str2 = string.lower(str1) dialog("转换后的内容:"..str2,

    • 本文向大家介绍javascript生成大小写字母,包括了javascript生成大小写字母的使用技巧和注意事项,需要的朋友参考一下 主要用到 str.charCodeAt()和 String.fromCharCode()方法 --》使用 charCodeAt() 来获得字符串中某个具体字符的 Unicode 编码。 --》fromCharCode() 可接受一个(或多个)指定的 Unicode 值

    • 本文向大家介绍ThinkPHP框架中的大字母函数?相关面试题,主要包含被问及ThinkPHP框架中的大字母函数?时的应答技巧和注意事项,需要的朋友参考一下 U:对url的组装 A:内部实例化控制器 S:缓存处理 R:调用某个控制器的操作方法 D:实例化自定义模型类 M:实例化基础模型类 I:获取参数 L:设置或者获取当前语言 C:设置或获取,保存配置