nyoj1170
来源:互联网 发布:发票二维码扫描软件 编辑:程序博客网 时间:2024/06/05 20:38
最大的数
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描述
小明和小红在打赌说自己数学学的好,于是小花就给他们出题了,考考他们谁NB,题目是这样的给你N个数
在这n个数之间添加N-1个*或+,使结果最大,但不可以打乱原顺序,请得出这个结果
如
1 3 5
结果是(1+3)*5=20;最大
可以添加若干个括号,但一定要保证配对,但是每两个数之间只可能有一个*或+
数列最前和最后不应有+或乘
小明想赢小红但是他比较笨,请你帮帮他
输入
多组测试数据以EOF结束,每组有一个n(n<10000),然后有n个正整数a[i](1<=a[i]<=20)
输出
输出最大的结果由于结果比较大,结果对10086取余
样例输入
31 2 335 1 2
样例输出
915
#include<stdio.h>int a[10005];void f(int l,int r){ if(a[l]==2)//如果是2,果断加1,3得出的乘积比1+1=2大 { a[l]++; return ; } if(a[l]==0)//当有2的时候会在前面出现一个0,那么就把标记移动到前面的那个3上 { l--; } a[l]<=a[r]?a[l]++:a[r]++;//优先向左加,因为是从左向右贪心,那么右面所出现的东西是未知的,所以向左加,比如4 1 4 1 } int main(){ int n; while(scanf("%d",&n)!=EOF) { int i,j; for(i=0;i<n;i++) { scanf("%d",&a[i]); } if(a[0]==1)//如果第一个数是1,那么就让他后面的数加1,自己变成0 { a[1]++; a[0]=0; } for(i=1;i<n-1;i++) { if(a[i]==1) { a[i]=0; f(i-1,i+1); } } if(a[n-1]==1&&n>1)//最后一个数如果是1那么只能往前找一个数加上 { for(i=n-2;!a[i];i--); a[i]++; a[n-1]=0; } int sum; for(i=0,sum=1;i<n;i++) { if(a[i]) { sum=(sum*a[i])%10086;//相乘 } } printf("%d\n",sum); }}
0 0
- nyoj1170
- nyoj1170 最大的数
- nyoj1170 最大的数
- NYOJ1170最大数
- nyoj1170最大的数
- nyoj1170 最大的数
- NYOJ1170 最大的数
- nyoj1170最大的数【贪心】
- NYOJ1170(最大的数)(贪心?)
- 中国目前还未掌握的核心技术有哪些?
- B树,B+树,B*树
- android应用卸载后的监听
- Eigen的几何模块
- pat乙级1020
- nyoj1170
- react-native使用蚂蚁金服的antd-mobile组件库教程
- 矩阵学习笔记
- centos下安装apache+php环境
- 翻转链表
- Machine Learning with Scikit-Learn and Tensorflow 6.5 计算复杂度
- CDOJ 844 线段树区间最大连续和
- (译)Sympy的矩阵操作
- [sql映射]resultMap和resultType