算法训练 最大的算式
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
……
1 2 3 4 5
#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.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终 ...
- 算法训练 最大的算式(动态规划)
问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...
- 蓝桥杯 ALGO-116算法训练 最大的算式
问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...
- 蓝桥杯 算法训练(2)
1.算法训练 Anagrams问题 问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear&q ...
- 神奇算式的c语言算法思想6,C语言算法训练题.docx
C语言算法训练题 C训练题一题1:/problem.page?gpid=T303未名湖边的烦恼每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰 ...
- 蓝桥杯练习系统习题-算法训练3
文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练3 题目搜索方式:Ctrl+F--> 输入题目名称-> ...
- Java实现蓝桥杯VIP算法训练 二元函数
试题 算法训练 二元函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: ...
- 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)
代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...
- 目前最好用的大规模强化学习算法训练库是什么?
点击蓝字 关注我们 本文整理自知乎问答,仅用于学术分享,著作权归作者所有.如有侵权,请联系后台作删文处理. 本文精选知乎问题"目前最好用的大规模强化学习算法训练库是什么?"评论区 ...
最新文章
- 常用浏览器内核驱动下载地址
- python提取字符串中的 中文 日文 韩文
- java利用模板发送邮件_使用JavaMail实现发送模板邮件以及保存到发件箱
- GET和POST请求到底有什么区别?
- python 视频人脸替换_Python基于OpenCV实现视频的人脸检测
- java 注释添加引用_java – 如何引用注释处理中的方法的实现?
- linux 配置redis密码
- URL和URI的区别和联系
- 微软Windows的 EAPHost 简介
- 基于51单片机霍尔自行车码表测速系统电路设计(毕业设计资料)
- html里hr标签,HTML hr 标签
- Android之UVC调试
- The Preliminary Contest for ICPC Asia Shanghai 2019 Light bulbs
- 流媒体服务器原理和架构解析
- 华为matebook笔记本鸿蒙,聊聊鸿蒙对笔记本电脑行业的影响
- zblog 全站ajax,ZBlog全站缓存
- html前端学习三:CSS
- siri语音输入效果_如何输入Siri的语音命令
- 2018年TalentQ的语言Verbal测试渣打、法国兴业、蔚来汽车网上测评(英文版)
- 外国人最羡慕中国人什么?