描述

给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值。例如:在1234中摆放一个加号最好的摆法就是12 + 34,和为36。

输入

输入有2行,第一行是一个非负整数m,表示有m个加号要放。
第2行是若干个数字(之间没有空格,数字个数大于m),

输出

输出最小加法表达式的值。

输入样例

输入样例1:
2
123456
输入样例2:
1
123456
输入样例3:
4
12345

输出样例

输出样例1:
102
输出样例2:
579
输出样例3:
15

思路

m个加号,即找m个断开的位置,求这m+1个数之和。
开始我想按上面这句话来实现,后来发现虽然m个断开点好找,只要深搜穷举就行了,但是后面要将数串化为整数不太好处理区间端点,而且麻烦,浪费了很多时间。
之后改变了实现的方式,简化过程,思路其实差不多。大概就是遍历这个数串,当到某一位时,只有两个选择——断开or不断开,他们的结果分别是产生了一个整数和未产生整数但是当前这位数要构成下一个整数的某一位。如此,我们可以设置两个参数sum、num分别表示目前这些已确定的整数之和以及下一个整数的前面几位。迭代到已分出m+1个整数,或未分出m+1个整数但已经遍历到最后一位数了为止。

代码
#include<iostream>
#include<algorithm>
using namespace std;int m, len;
int ans;
string s;//用于存这串数字,从s[0]开始void dfs(int step, int sum, int num, int cur)
{/**step表示当前遍历都第step位数字*cur表示当前,前面已经断开cur次,即有cur个数字确定了*sum表示这cur个数之和*num表示从最后一次断开开始,累计的数值*/if(cur == m){while(step < len)//已经分成m+1段了,将最后一段化成整数{num = num*10+(int)(s[step]-'0');++step;}ans = min(ans, sum+num);//取当前最小的答案return;}//表示还没有分成m+1段,但是已经到最后一个数字了//但是加号不能放在最后面,所以这是不可行的if(step == len-1) return;//如果从当前位置断开,使s[step]称为第cur个整数的个位,如此迭代dfs(step+1,sum+num*10+(int)(s[step]-'0'),0,cur+1);//不从当前位置断开,如此迭代dfs(step+1,sum,num*10+(int)(s[step]-'0'),cur);
}int main()
{cin>>m>>s;len = s.length();//数字串长ans = 0xfffffff;//因为要求最小和,所以初始值设为比较大的数dfs(0,0,0,0);cout<<ans<<endl;
}

NOJ 1581.最佳加法式相关推荐

  1. 人脸检测发展:从VJ到深度学习(下)

    人脸检测发展:从VJ到深度学习(下) 2016-08-11 16:36 转载 深度学习大讲堂 0条评论 雷锋网按:本文作者邬书哲, 中科院计算所智能信息处理重点实验室VIPL课题组博士生,研究方向:目 ...

  2. 走近人脸检测:从VJ到深度学习(下)

    转载自:https://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650324508&idx=1&sn=b103ea6912 ...

  3. 长文干货!走近人脸检测:从VJ到深度学习(上)(下)

    长文干货!走近人脸检测:从VJ到深度学习(下) http://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650324508&idx= ...

  4. INT102 算法笔记

    PDF版本下载 文章目录 week1 伪代码与时间复杂度 伪代码(Pseudo Code) 时间复杂度(Time complexity) week2 评估基础查找与排序算法 线性查找(Linear S ...

  5. 人脸检测总结报告(2018_1_20-2018_1_30)

    一.总述 根据Yang,Kriegman,and Ahuja(2002)的分类,人脸检测的方法分为基于特征的.基于模板的和基于表观的方法. 基于特征的方法,尝试寻找有区分性的图像特征的位置,比如眼睛. ...

  6. 第三次组队赛 (DFSBFS)

    网站:CSUST 8月1日 先总结下,不得不说死的很惨,又是第三就不说了,一共7道题,AC了5道,但是有一个组三个人是做的个人赛,有两人AK了.......Orz,然后深搜还是大问题,宽搜倒是不急了. ...

  7. 特征值 模拟 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛

    链接:https://ac.nowcoder.com/acm/contest/27302/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52 ...

  8. Cloudflare的HTTP/2优化策略

    Cloudflare针对HTTP/2优先级的进一步优化,将网页控制权尽可能地交给网站所有者,可根据具体需求与场景,定制化网页加载优先级策略,提供更快速,更优质的用户Web访问与交互体验. 文 / Pa ...

  9. (Review cs231n) Backpropagation and Neural Network

    损失由两部分组成: 数据损失+正则化损失(data loss + regularization) 想得到损失函数关于权值矩阵W的梯度表达式,然后进性优化操作(损失相当于海拔,你在山上的位置相当于W,你 ...

最新文章

  1. 宜人贷YEP技术、数据沉淀背后:金融科技迎来开放赋能时代
  2. 如何快速而准确的获取生物体的遗传信息一直是生命科学 中的一个非常重要的研究点
  3. 时间序列数据和MongoDB:第三部分 - 查询,分析和呈现时间序列数据
  4. 智能车竞赛技术报告 | 单车拉力组 - 长春理工大学- 追风零队 2021
  5. 快速连续点击两次出现相同内容的解决方法
  6. RocketMQ源码解析:Producer发送消息+Broker消息存储
  7. easyUI +datagirdview加载本地json的方式 笔记
  8. Spring AOP中declare-parents为特定的类增加新的功能
  9. alchemy的Box2D版本
  10. 从scheduler is shutted down看程序员的英文水平
  11. Pytorch state_dict介绍
  12. 2012、2014、2016、2020年最全数据合集产学研专题2.0
  13. 互联网大厂面试考点————JVM
  14. OpenCV判断图片是否是黑白图片
  15. C|倒三角(trangle)
  16. Java微信支付API文档测试
  17. spark2.2以后版本任务调度将增加黑名单机制
  18. 二、RPA机器人开发基础
  19. 结构方程模型(SEM)及其R实现
  20. Java后端--67--Springboot的响应式编程

热门文章

  1. 广州去香港的N种方法
  2. Effective C++知识点
  3. 大数据算法_大数据算法解析,如何创建用户画像实现千人千面?
  4. 依图胸部CT新冠肺炎智能评价系统:三大智能功能精准辅助医学分析|百万人学AI评选
  5. 战斗机机动动作分类与模型
  6. 自动编码器检测检测信用卡欺诈
  7. IDEA出现Perhaps you are running on a JRE rather than a JDK?
  8. Firefox使用wingate代理上网的问题
  9. Best Fitting Hyperplanes for Classification(用于分类的最佳拟合超平面)
  10. mysql事务隔离级别详解_MySQL的事务隔离级别详解