问题标题: 酷町堂:5516 乘积最大怎么做啊?

0
0
已解决
崔乔昕
崔乔昕
中级光能
中级光能

5516   乘积最大

经验值:800 时间限制:1000毫秒 内存限制:128MB

题目描述 Description

给定n个正整数,请你在这n个正整数中找出3个数,要保证3个数之和不超过一个给定的值w,则能够找出来的3个数的乘积最大是多少?如果没有符合条件的3个数,则输出-1。

输入描述 Input Description

输入有两行,
第一行输入两个个正整数n和w;
第二行输入n个正整数。

输出描述 Output Description

输出满足条件的3个数乘积的最大值。(没有符合条件的数则输出-1)

样例输入 Sample Input

5 15 3 9 7 5 3

样例输出 Sample Output

105

数据范围及提示 Data Size & Hint

n<=100,w<=200000。
输入的每个正整数不超过100000。

崔乔昕在2022-08-15 20:40:18追加了内容

#include <iostream>
using namespace std;
int n,w,a[105],maxn=-1;
bool flag=false;
int main(){
    cin>>n>>w;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            for(int k=j+1;k<=n;k++){
                if(a[i]+a[j]+a[k]<=w&&a[i]+a[j]+a[k]>maxn){
                    maxn=a[i]*a[j]*a[k];
                    flag=true;
                }
            }
        }
    }
    if(flag==false){
        cout<<-1;
    }
    if(flag==true){
        cout<<maxn;
    }
    return 0;
}


1
已采纳
万睿言
万睿言
初级光能
初级光能
核心思路:
    遍历1到n
        遍历i+1到n
            f遍历j+1到n
                如果a[i]+a[j]+a[k]小于等于w并且a[i]×a[j]×a[k]大于maxn
                    maxn更新为a[i]×a[j]×a[k]
                    flag置为true(flag初始值为false)
最后根据flag的真假来判断输出何值

 

1
颜天顺
颜天顺
初级守护
初级守护

吧a数组,和maxn改Long long

0
0
阮文涛
阮文涛
新手守护
新手守护

第三行 int 改为 long long

0
0
徐婧芸
徐婧芸
修练者
修练者

大部分都对,把  int  改成   long long 。然后将判断后面改成a[i]*a[j]*a[k]>maxn就可以了

我要回答