题解 P6437 【[COCI2011-2012#6] JACK】
wuyonghuming · · 题解
思路:
这道题目直接用暴力循环就可以解决了。可以排序优化,假设位置是
就说明这个方案以后的方案都不可行,已经排过序了,后面的只会更大。
代码:
#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;//别忘了
}
谢谢观看,希望大家能看懂