- toc {:toc}
λ¬Έμ
μΉ΄μ§λ Έμμ μ μΌ μΈκΈ° μλ κ²μ λΈλμμ κ·μΉμ μλΉν μ½λ€. μΉ΄λμ ν©μ΄ 21 μ λμ§ μλ νλ λ΄μμ, μΉ΄λμ ν©μ μ΅λν ν¬κ² λ§λλ κ²μμ΄λ€. λΈλμμ μΉ΄μ§λ Έλ§λ€ λ€μν κ·μ μ΄ μλ€.
νκ΅ μ΅κ³ μ λΈλμ κ³ μ κΉμ μΈμ μλ‘μ΄ λΈλμ κ·μΉμ λ§λ€μ΄ μκ·Ό, μ°½μμ΄μ κ²μνλ €κ³ νλ€.
κΉμ μΈ λ²μ μ λΈλμμμ κ° μΉ΄λμλ μμ μ μκ° μ°μ¬ μλ€. κ·Έ λ€μ, λλ¬λ N μ₯μ μΉ΄λλ₯Ό λͺ¨λ μ«μκ° λ³΄μ΄λλ‘ λ°λ₯μ λλλ€. κ·Έλ° νμ λλ¬λ μ«μ M μ ν¬κ² μΈμΉλ€.
μ΄μ νλ μ΄μ΄λ μ νλ μκ° μμ N μ₯μ μΉ΄λ μ€μμ 3 μ₯μ μΉ΄λλ₯Ό 골λΌμΌ νλ€. λΈλμ λ³ν κ²μμ΄κΈ° λλ¬Έμ, νλ μ΄μ΄κ° κ³ λ₯Έ μΉ΄λμ ν©μ M μ λμ§ μμΌλ©΄μ M κ³ΌΒ μ΅λν κ°κΉκ² λ§λ€μ΄μΌ νλ€.
N μ₯μ μΉ΄λμ μ¨μ Έ μλ μ«μκ° μ£Όμ΄μ‘μ λ, M μ λμ§ μμΌλ©΄μ M μ μ΅λν κ°κΉμ΄ μΉ΄λ 3 μ₯μ ν©μ κ΅¬ν΄ μΆλ ₯νμμ€.
μ λ ₯
첫째 μ€μ μΉ΄λμ κ°μ N(3 β€Β N β€Β 100) κ³Ό M(10 β€Β M β€Β 300,000) μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€μλ μΉ΄λμ μ°μ¬ μλ μκ° μ£Όμ΄μ§λ©°, μ΄ κ°μ 100,000 μ λμ§ μλ μμ μ μμ΄λ€.
ν©μ΄ M μ λμ§ μλ μΉ΄λ 3 μ₯μ μ°Ύμ μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ M μ λμ§ μμΌλ©΄μ M μ μ΅λν κ°κΉμ΄ μΉ΄λ 3 μ₯μ ν©μ μΆλ ₯νλ€.
μΆμ²:https://www.acmicpc.net/problem/2798
νμ΄
μ’ λ§λΆ 1 117 μμ λ³Έ μ΅λ μ°μ λΆλΆ κ΅¬κ° ν©μ μμ©ν΄λ³΄λ € νμΌλ λΆκ°.
무μνκ² νμ΄λ΄€λ€.
λͺ¨λ κ²½μ°μ μλ₯Ό μ λΆ κ²½μ ν΄ ν©μ λΉκ΅νλ λ°©μμΌλ‘ νμ΄νλ€.
#include <iostream>
using namespace std;
// λΈλμ
// μΈ κ°μ§λ₯Ό μ ν -> Mμ κ°μ₯ κ°κΉμ΄ ν©μ μΆλ ₯
// λͺ¨λ κ²½μ°μ μ -> 100X99X98;
int cardNum[101];
int main()
{
int n, m, num, max=0, sum=0;
cin >> n >> m;
for(int i=0; i<n; i++)
{
cin >> num;
cardNum[i]=num;
}
for(int i=0; i<n; i++)
{
for(int j=i+1; j<n; j++)
{
for(int k=j+1; k<n; k++)
{
sum = cardNum[i]+cardNum[j]+cardNum[k];
if(m>=sum&&max<sum)
max = sum;
}
}
}
printf("%d\n", max);
return 0;
}