山东大学考研机试——Acwing3718. 插入乘号
给定一个长度为 n的数字串,向里面插入 k个乘号,输出可以得到的最大结果。
注意:插入乘号之后的每个数可以有前导0。
输入格式
第一行输入两个整数 n,k。
第二行输入长度为 n的一个数字序列。
输出格式
输出可以得到的最大结果。
数据范围
1≤k<n≤10
样例
4 2 1234
输出
144
分析
本题的数字的长度是10,每个数字之间的间隔共有9个,每个间隔有放与不放两种可能性,则共有2^9种情况所以使用最暴力的方法依次进行枚举即可,又要注意这种对于一串字符串的不同位置我们可以使用二进制枚举
的方法,具体可以参考这里
#include <iostream> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; int main() { int n, m; string s; cin >> n >> m >> s; LL res = 0; int cnt = n - 1;//共有n-1个位置可以插入乘号 for (int i = 0; i < 1 << cnt; i ++ ) { int t = 0; for (int j = 0; j < cnt; j ++ ) t += i >> j & 1;//i的第j位是不是1,想当于把任意个乘号任意的插入字符串的过程全部枚举了一遍 if (t == m) { LL p = 1; string str = s.substr(0, 1); for (int j = 0; j < cnt; j ++ ) if (i >> j & 1)//说明在该位置上的数与前一个位置上的数之前有乘号 { p *= stoll(str);//能将string类型转化为longlong型的整数 str = s.substr(j + 1, 1);//再将下一个位置上的数加入到新的字符串中 //为什么此处必须使用substr函数来截取乘号后面的那个字符而不能直接使用str=s[j+1]:因为s[j+1]的类型是char } else { str += s[j + 1]; } p *= stoll(str); res = max(res, p);//更新答案 } } cout << res << endl; return 0; }
分类:
满嘴408,你想考研啊?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理