題目描述
小楊發現了?𝑛?個寶箱,其中第?𝑖?個寶箱的價值是?𝑎𝑖?。
小楊可以選擇一些寶箱放入背包并帶走,但是小楊的背包比較特殊,假設小楊選擇的寶箱中最大價值為?𝑥,最小價值為?𝑦,小楊需要保證?𝑥?𝑦≤𝑘,否則小楊的背包會損壞。
小楊想知道背包不損壞的情況下,自己能夠帶走寶箱的總價值最大是多少。
輸入格式
第一行包含兩個正整數?𝑛,𝑘,含義如題面所示。
第二行包含?𝑛n?個正整數?𝑎1,𝑎2,…,𝑎𝑛,代表寶箱的價值。
輸出格式
輸出一個整數,代表帶走寶箱的最大總價值。
輸入輸出樣例
輸入 #1
5 1 1 2 3 1 2
輸出 #1
7
說明/提示
【樣例解釋】
在背包不損壞的情況下,小楊可以拿走兩個價值為?2?的寶箱和一個價值為?3?的寶箱。
【數據范圍】
對于全部數據,保證有?1≤𝑛≤1000,0≤𝑘≤1000,1≤𝑎𝑖≤1000。
對數組進行排序,然后雙指針一前一后去遍歷,每一次都定義一個變量g(隨意命名),如果符合?𝑥?𝑦 ≤ 𝑘則g += x,然后每一次都與res比較去更新res的值
代碼:
?
#include <bits/stdc++.h>
using namespace std;const int N = 1e3 + 5;
int a[N];int n,k,res = a[0];int main()
{cin >> n >> k;for(int i=0;i<n;i++){cin >> a[i];}sort(a+0,a+n);// for(int i=0;i<n;i++){// cout << a[i] << " ";// }// cout << endl;for(int i=1;i<n;i++){int g = 0;for(int j=0;j<=i;j++){if(a[i] - a[j] <= k) g += a[j]; }res = max(res,g);}cout << res << endl;return 0;
}
加油