• 最大的数


    最大的数

    时间限制: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取余
     1 只用考虑 1 的情况就行了。是 1 的话就将它要么加到它的左边要么加到它的右边(加到 1 两边较小的那个数上,保证乘积最大)。
     2 其他的情况不用考虑(只要是比 1 大的数相乘都比相加大)。
     3 #include<iostream>
     4 using namespace std;
     5 int a[10005];
     6 void add(int l,int r){//用于判断左加还是右加
     7     if(a[l]==2){    
     8         a[l]++;
     9         return ;
    10     }
    11     if(a[l]==0)
    12         l--;
    13     a[l]<=a[r]?a[l]++:a[r]++;
    14 }
    15 int main(){    
    16     int n;
    17     while(cin>>n){
    18         int i,j;
    19         for(i=0; i<n; i++)
    20             cin>>a[i];
    21         if(a[0]==1){
    22             a[1]++;
    23             a[0]=0;
    24         }
    25     for(i=1; i<n-1; i++)
    26         if(a[i]==1){
    27             a[i]=0;
    28             add(i-1,i+1);
    29         }
    30         if(a[n-1]==1&&n>1){
    31             for(i=n-2; !a[i]; i--);//0
    32                 a[i]++;
    33             a[n-1]=0;
    34         }
    35         int sum;
    36         for(i=0,sum=1; i<n; i++)
    37             if(a[i])
    38                 sum=(sum*a[i])%10086;
    39         cout<<sum<<endl;
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    c#結合正則表達式驗證輸入的字符串
    [SQL]数据库设计说明书模板
    如何在网页中插入Flv视频文件
    JAVASCRIPT常用检验代码
    Javascript知识精华
    提高Remoting的DataSet传输的性能
    如何快速的在SharePoint里构建一个Blog站点
    可爱的 Python,可爱的.NET
    郁闷的Xml Serialization BUG
    初试Zope(1)
  • 原文地址:https://www.cnblogs.com/geziyu/p/9347421.html
Copyright © 2020-2023  润新知