牛客真题编程——day14

编程环境:c++

1、字符串价值

描述:有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值
例如: 字符串"abacaba",里面包括4个'a',2个'b',1个'c',于是这个字符串的价值为4 * 4 + 2 * 2 + 1 * 1 = 21
牛牛有一个字符串s,并且允许你从s中移除最多k个字符,你的目标是让得到的字符串的价值最小。

算法思想:

根据题目要求,要想使得移除固定字符个数后,字符串的价值最小,那么每次移除的都应该是当前的字符串中出现次数最多的字符。首先对字符串出现的字符数进行统计,每次移除一个后,需要对统计字符出现次数的数组重新进行排序,确保每次溢出的都是出现次数最多的字符串即可。最后按照字符串价值公式,计算得到最终的字符串最小价值。

部分代码实现:

2、下厨房

描述:

牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。

输入描述:每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。

算法思想:

题目输入的行数不确定,需要自行判断是否还有字符串输入,这里我省却了行的概念,将所有需要的食材存储到一个字符串数组中。对于所有的食材,我们需要对其进行去重操作,得到需要准备的食材个数。首先将所有的字符串排序,那么相同的食材将会聚集到一起,遍历排序后的字符串数组,当相邻元素不同时,则代表不同的食材(计数+1)。遍历完成得到的即为去重后所需食材个数。

3、资产包打包

描述:

在金融资产交易中,经常涉及到资产包的挑选打包。在资产包打包过程中,每种类型的资产有固定的数量与价值,需选择某几种资产打包,使得资产包总价值最大。打包时每种资产只能整体打包,不能分割。假设现有可容纳M条资产的资产包,另外有N种资产。资产Na数量为Ta条,总价值为Va元;资产Nb数量为Tb条,总价值为Vb元;资产Nc数量为Tc条,总价值为Vc元......;资产Nn数量为Tn,总价值为Vn。编写算法,挑选哪些类型资产放入资产包可使得资产包总价值最大?

算法思想:

由于资产包只能选择整体放入或者不放,所以题目其实是一个0/1背包的动态规划问题。设j为总容量,wi为第i件物品重量。如果背包的总容量j小于第i件物品的所占空间,此时所能获得的最大价值相当于考虑第1到第i-1件物品放入总容量为j的背包。否则,可以选择放或不放第i件物品:如果不放第i件物品,此时最大价值与只放前i-1件相同;第i件物品放进背包时,总容量为j的背包必须分配wi的空间给第i件物品,而之前的第1到第i-1物品是只能放在总容量为j-wi的背包中,两种情况取大值。初始化一个结果数组dp,有递推式:dp(i,j)=max {dp(i-1, j),dp(i-1, j-w)+vi}

代码部分实现:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
仿牛客论坛,Redis主要用于两个方面的功能:缓存用户信息和生成验证码。 首先,服务器会生成验证码,将这个随机字符串作为Redis的key,将生成的验证码字符串作为value存储在Redis。这个验证码会存在客户端的cookie里,并且Redis只会保存这个验证码的信息60秒钟。 其次,Redis还用于缓存用户信息。在登录时,服务器会生成一个登录凭证,即LoginTicket,然后将这个LoginTicket存储在Redis。每次请求时,拦截器会拦截这个LoginTicket,从Redis获取相应的登录凭证信息。 当用户退出登录时,服务器会将这个登录凭证的状态设置为1,表示已经注销。然后将这个更新后的登录凭证存储在Redis。 总结来说,仿牛客论坛的Redis主要用于缓存用户信息和生成验证码。通过使用Redis,可以提高系统的性能和效率,减轻数据库的负载压力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [4.7仿牛客社区项目——Redis优化登录模块(存验证码、登录凭证、缓存用户信息)](https://blog.csdn.net/Doreen_FF/article/details/118274468)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值