中级光能
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到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的真假来判断输出何值