M个加号插入到数字串中使得加和最小(C++实现)

news/2025/1/15 15:02:52/

有一个由数字1-9组成的数字串(长度不超过200),问如何将M(1<=M<=200)个加号插入这个数字串中,使得所形成的算术表达式的值最小。

  1. 加号不能加在数字串的最前面或最末尾,也不应有两个或两个以上的加号相邻
  2. M的值一定小于数字串的长度

例如:数字串79846,若需加入两个加号,则最佳方案是79+8+46,算术表达式的值为133。

代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 200;
//const int INF = 0x3f3f3f3f;
int dp[N][N];
int num[N][N];
int m;
char ch[N];//算从第k个数字到第p个数字(不包括)组成的值
int NUM(int k, int p) {//num里的元素初始化为-1,如果不等于-1,则表示已得到结果if (num[k][p] != -1) {return num[k][p];}int sum = 0;for (int i = k; i<p; i++) {sum = sum * 10 + ch[i] - '0';}num[k][p] = sum;return sum;
}//前p个数字加m个加号的最小值
int DP(int p, int m) {//dp里的元素初始化为-1,如果不等于-1,则表示已得到结果if (dp[p][m] != -1) {return dp[p][m];}if (m == 0) {//如果加号个数为0dp[p][0] = NUM(0, p);return dp[p][0];}//赋一个const类型的值,表示dp[p][m]一旦有了值以后就不允许通过赋值来改变它//这里用无穷大值INF = 0x3f3f3f3f的意义是?我随便用个const int类型的值都可以啊dp[p][m] = N;for (int i = p - 1; i>=m; i--) {dp[p][m] = min(dp[p][m], DP(i, m - 1) + NUM(i, p));//(右侧)dp[p][m]相当于一个以前较小值,//DP(i,m-1)相当于前i个数字(不包括)加m-1个加号的较小值,//dp[p][m]=min(dp[p][m],DP(i,m-1)+NUM(i,p)),等式左侧dp[p][m]为新找到的较小值}return dp[p][m];
}int main() {//使用memset函数调用内存,并初始化为-1memset(dp, -1, sizeof(dp));memset(num, -1, sizeof(num));cin >> ch;cin >> m;int len = strlen(ch);cout << DP(len, m) << endl;system("pause");return 0;
}

看别人的代码都定义了const int INF = 0x3f3f3f3f;我是真的搞不明白用这个的作用在哪里,毕竟也是第一次见到,第一次了解。去搜了一下,也只找到了使用“无穷大”的好处,要是有知道这个问题为什么要用INF = 0x3f3f3f3f;的大佬,还希望在评论区留言帮帮孩子
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/753208.html

相关文章

腾讯云轻量服务器香港节点24元30M峰值带宽很值得

腾讯云轻量应用服务器Lighthouse香港地域24元一个月起&#xff0c;30Mbps峰值带宽很值得&#xff0c;云服务器吧分腾讯云香港节点轻量应用服务器配置及优惠价格表&#xff1a; 腾讯云香港轻量应用服务器 腾讯云香港轻量应用服务器 腾讯云轻量应用服务器Lighthouse香港节点不用…

700m信号测试软件,5G(NR)中同步信号的测量(SS-RSRP)

同步信号SS-RSRP (Synchronization Signal Reference Signal Received Power) 是同步信号在每个RE的平均功率,其测量在SMTC中的窗时段进行;kangguoying20210113 在5G(NR)网络中终端基于SS-RSRP进行测量,根据它进行小区选择、重选、功率控制和波束管理;RSRP测量报告生成、报告…

全志D1s/F133学习笔记(1)——MangoPi-MQ(芒果派麻雀)上手试玩

一、资料 D1s是全志针对智能解码市场推出的高性价比AIoT芯片。它使用64bit RISC-V架构的阿里平头哥C906处理器&#xff0c;内置了64M DDR2&#xff0c;支持Linux系统&#xff0c;同时集成了大量自研的音视频编解码相关IP&#xff0c;可以支持H.265,、H.264、MPEG-1/2/4、JPEG等…

ctfshow web133和其他命令执行的骚操作

这里是总结自己最近遇到的命令执行题&#xff0c;感觉还是不错分享出来。也欢迎师傅们评论一些骚操作 一. ctfshow web入门 133 1.正常解 <?php error_reporting(0); highlight_file(__FILE__); //flag.php if($F $_GET[F]){if(!preg_match(/system|nc|wget|exec|passth…

Excel 合并单元格筛选时只出现首行

一、问题描述 如果对合并单元格直接筛选&#xff0c;只能筛选出第一个单元格的值 二、原因分析&#xff1a; Excel筛选单元格时&#xff0c;遇到不连续区域&#xff08;即中间有空白单元格&#xff09;会识别不到后续内容&#xff1b; 合并单元格后&#xff0c; 除首行外&…

解决Github 限制100M大文件上传

笔者在GitHub仓库上传超过100M的video时遇到了push不了的情况&#xff0c;提示限制了100M&#xff0c; this exceeds GitHubs file size limit of 100.00 MB 随后使用 git-lfs 解决了。 Git Large File Storage | Git Large File Storage (LFS) replaces large files such as a…

RT-Thread 柿饼派M7 全志F133 ddr 运行xboot

前言 最近拿到 RT-Thread 柿饼派M7的开发板&#xff0c;默认运行的是RT-Thread Persim OS&#xff0c;不过我把固件给擦除了&#xff0c;无法开机了&#xff0c;所以先从最基本的启动下手开发板板子SDEMMC&#xff0c;也就是板载 SD卡&#xff0c;所以无法使用全志的烧卡工具制…

Android Ble 连接设备失败 onConnectionStateChange status 返回133

Android Ble 连接设备失败时回调函数 onConnectionStateChange status 返回133 开始找问题 各种mac地址&#xff0c;权限&#xff0c;线程…找了个遍&#xff0c;结果就是返回纹丝不动 又因为 mBluetoothGatt mBluetoothDevice.connectGatt(mContext, true, mGattCallback); 第…