算法训练 最大的算式  
时间限制:1.0s   内存限制:256.0MB
问题描述
题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如:
  N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:
  1*2*(3+4+5)=24
  1*(2+3)*(4+5)=45
  (1*2+3)*(4+5)=45
  ……
输入格式
输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行为 N个用空格隔开的数字(每个数字在0到9之间)。
输出格式
输出文件仅一行包含一个整数,表示要求的最大的结果
样例输入
5 2
1 2 3 4 5
样例输出
120
样例说明
(1+2+3)*4*5=120
好像正解使用动态规划,我用递归做的,但有一组测试数据没通过。。。

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <map>
#define for(i,x,n) for(int i=x;i<n;i++)
#define ll long long int
#define INF 0x3f3f3f3f
#define MOD 1000000007using namespace std;int a[15];//0为*,1为+
int num[15];
int m[15];//待乘
int n,k;
int maxx=0;int sum(){int i=0;if(a[1]==0){m[i++]=num[0];m[i]=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}int ans=1;for(j,0,i+1){ans*=m[j];}return ans;}if(a[1]==1){m[i]=num[0];m[i]+=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}int ans=1;for(j,0,i+1){ans*=m[j];}return ans;}}void dfs(int pos,int mul,int add){if(pos==n&&mul==0&&add==0){maxx=max(maxx,sum());}else if(pos!=n){if(mul>0&&add==0){a[pos]=0;dfs(pos+1,mul-1,add);}if(mul==0&&add>0){a[pos]=1;dfs(pos+1,mul,add-1);}if(mul>0&&add>0){a[pos]=0;dfs(pos+1,mul-1,add);a[pos]=1;dfs(pos+1,mul,add-1);}}
}int main()
{scanf("%d %d",&n,&k);for(i,0,n){scanf("%d",&num[i]);}dfs(1,k,n-k-1);//放的位置,乘号剩余,加号剩余printf("%d",maxx);return 0;
}

更新:

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <map>
#define for(i,x,n) for(int i=x;i<n;i++)
#define ll long long int
#define INF 0x3f3f3f3f
#define MOD 1000000007using namespace std;int a[15];//0为*,1为+
ll num[15];
ll m[15];//待乘
ll n,k;
ll maxx=0;ll sum(){int i=0;if(a[1]==0){m[i++]=num[0];m[i]=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}ll ans=1;for(j,0,i+1){ans*=m[j];}return ans;}if(a[1]==1){m[i]=num[0];m[i]+=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}ll ans=1;for(j,0,i+1){ans*=m[j];}return ans;}}void dfs(int pos,int mul,int add){if(pos==n&&mul==0&&add==0){if(maxx<sum()){maxx=sum();}//maxx=max(maxx,sum());}else if(pos!=n){if(mul>0&&add==0){a[pos]=0;dfs(pos+1,mul-1,add);}if(mul==0&&add>0){a[pos]=1;dfs(pos+1,mul,add-1);}if(mul>0&&add>0){a[pos]=0;dfs(pos+1,mul-1,add);a[pos]=1;dfs(pos+1,mul,add-1);}}
}int main()
{scanf("%d %d",&n,&k);for(i,0,n){scanf("%d",&num[i]);}dfs(1,k,n-k-1);//放的位置,乘号剩余,加号剩余printf("%lld",maxx);return 0;
}

转载于:https://www.cnblogs.com/TWS-YIFEI/p/6351623.html

算法训练 最大的算式相关推荐

  1. 蓝桥杯 算法训练 最大的算式

    传送门 算法训练 最大的算式   时间限制:1.0s   内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终 ...

  2. 算法训练 最大的算式(动态规划)

    问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...

  3. 蓝桥杯 ALGO-116算法训练 最大的算式

    问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...

  4. 蓝桥杯 算法训练(2)

    1.算法训练 Anagrams问题 问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear&q ...

  5. 神奇算式的c语言算法思想6,C语言算法训练题.docx

    C语言算法训练题 C训练题一题1:/problem.page?gpid=T303未名湖边的烦恼每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰 ...

  6. 蓝桥杯练习系统习题-算法训练3

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练3 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  7. Java实现蓝桥杯VIP算法训练 二元函数

    试题 算法训练 二元函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: ...

  8. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  9. 目前最好用的大规模强化学习算法训练库是什么?

    点击蓝字  关注我们 本文整理自知乎问答,仅用于学术分享,著作权归作者所有.如有侵权,请联系后台作删文处理. 本文精选知乎问题"目前最好用的大规模强化学习算法训练库是什么?"评论区 ...

最新文章

  1. 常用浏览器内核驱动下载地址
  2. python提取字符串中的 中文 日文 韩文
  3. java利用模板发送邮件_使用JavaMail实现发送模板邮件以及保存到发件箱
  4. GET和POST请求到底有什么区别?
  5. python 视频人脸替换_Python基于OpenCV实现视频的人脸检测
  6. java 注释添加引用_java – 如何引用注释处理中的方法的实现?
  7. linux 配置redis密码
  8. URL和URI的区别和联系
  9. 微软Windows的 EAPHost 简介
  10. 基于51单片机霍尔自行车码表测速系统电路设计(毕业设计资料)
  11. html里hr标签,HTML hr 标签
  12. Android之UVC调试
  13. The Preliminary Contest for ICPC Asia Shanghai 2019 Light bulbs
  14. 流媒体服务器原理和架构解析
  15. 华为matebook笔记本鸿蒙,聊聊鸿蒙对笔记本电脑行业的影响
  16. zblog 全站ajax,ZBlog全站缓存
  17. html前端学习三:CSS
  18. siri语音输入效果_如何输入Siri的语音命令
  19. 2018年TalentQ的语言Verbal测试渣打、法国兴业、蔚来汽车网上测评(英文版)
  20. 外国人最羡慕中国人什么?

热门文章

  1. xib自动布局的时候,label高度计算误差问题
  2. ajax 遍历select 下拉框
  3. HTML(三):表单元素
  4. 使用ajaxfileupload.js实现文件上传
  5. UITabBarController+UINavigationController+UIToolBar
  6. SL400之换轴篇@屏轴门
  7. 将MATLAB的变量数据导入到C/C++程序中的方法
  8. Golang 判断key是否在map中
  9. gcc -ldl 选项作用
  10. DPDK pci设备初始化(十七)