题目链接:P6437 [COCI2011-2012#6] JACK - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
给定 n 个正整数 a1...an,请从中选择 3 个数字,满足他们的和不大于给定的整数 m,请求出这个和最大可能是多少。
输入格式
第一行有两个整数,分别表示数字个数 n 和给定的整数 m。
第二行有 n 个整数,表示给定的 n 个数字 ai。
输出格式
输出一行一个整数表示答案。
样例 #1
样例输入 #1
5 21
5 6 7 8 9
样例输出 #1
21
样例 #2
样例输入 #2
10 500
93 181 245 214 315 36 185 138 216 295
样例输出 #2
497
提示
数据规模与约定
对于 100% 的数据,保证 1 <= n <= 100,6 <= m <= 3×10^5,1 <= ai <= 10^5,数据保证有解。
说明
题目译自 COCI2011-2012 CONTEST #6 T1 JACK,翻译来自 @一扶苏一。
AC code:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
vector<int> a;
while(n--)
{
int x;
cin>>x;
a.push_back(x);
}
int sum=0;
int len=a.size();
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
for(int k=j+1;k<len;k++)
{
if(a[i]+a[j]+a[k]<=m)
sum=max((a[i]+a[j]+a[k]),sum);
}
}
}
cout<<sum<<endl;
return 0;
}