1 条题解

  • 0
    @ 2025-8-24 22:20:46

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar wuyonghuming
    **

    搬运于2025-08-24 22:20:46,当前版本为作者最后更新于2020-04-20 10:39:07,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    思路:

    这道题目直接用暴力循环就可以解决了。可以排序优化,假设位置是ii,这些数是aa,如果:

    ai+ai+1+ai+2>ma_i+a_{i+1}+a_{i+2}>m

    就说明这个方案以后的方案都不可行,已经排过序了,后面的只会更大。

    代码:

    #include <bits/stdc++.h>//头文件
    using namespace std;
    int n,m,a[1005],ans=0;//先把答案置零
    int main()
    {
    	cin>>n>>m;//输入
    	for(int i=1;i<=n;i++)//循环输入
    	{
    		cin>>a[i];//输入a
    	}
    	sort(a+1,a+n+1);//排序
    	for(int i=1;i<=n;i++)//循环
    	{
    		if(a[i]+a[i+1]+a[i+2]>m)//如果当前加上下一个和下一个的下一个大于m的话
    		{
    			break;//就结束循环
    		} 
    		for(int j=i+1;j<=n;j++)//循环
    		{
    			if(a[i]+a[j]+a[j+1]>m)//如果最小的情况大于m
    			{
    				break;//就结束循环
    			}
    			for(int k=j+1;k<=n;k++)//循环
    			{
    				if(a[i]+a[j]+a[k]>m)//如果当前大于m
    				{
    					break;//结束循环
    				}
    				ans=max(a[i]+a[j]+a[k],ans);//更新最大值
    			}
    		}
    	}
    	cout<<ans;//输出
    	return 0;//别忘了
    }
    

    谢谢观看,希望大家能看懂

    • 1

    信息

    ID
    5462
    时间
    1000ms
    内存
    32MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者