测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A32277. 宝箱题面描述小杨发现了n个宝箱,其中第i个宝箱的价值是a i 。小杨可以选择一些宝箱放入背包并带走,但是小杨的背包比较特殊,假设小杨选择的宝箱中最大价值为x,最小价值 为y,小杨需要保证 x-y<=k,否则小杨的背包会损坏。小杨想知道背包不损坏的情况下,自己能够带走宝箱的总价值最大是多少。

填空题 较难

题目描述

宝箱

题面描述

小杨发现了n个宝箱,其中第i个宝箱的价值是a i 。

小杨可以选择一些宝箱放入背包并带走,但是小杨的背包比较特殊,假设小杨选择的宝箱中最大价值为x,最小价值 为y,小杨需要保证 x-y<=k,否则小杨的背包会损坏。

小杨想知道背包不损坏的情况下,自己能够带走宝箱的总价值最大是多少。

输入格式

第一行包含两个正整数 n, k,含义如题面所示。

第二行包含n个正整数 a 1,a 2,..........,a n,代表宝箱的价值。

输出格式

输出一个整数,代表带走宝箱的最大总价值。

样例1

输入

5    1

1 2 3 1 2

输出

7

样例解释

在背包不损坏的情况下,小杨可以拿走两个价值为 2 的宝箱和一个价值为 3 的宝箱。

数据范围

对于全部数据,保证有 1 <= n <= 1000, 1 <= k <= 1000, 1 <= a i <= 1000。

参考答案

#include<bits/stdc++.h> using namespace std; const int N = 1010; int a[N]; int n,k; int main() { cin>>n>>k; for(int i=1; i<=n; i++) { cin>>a[i]; } sort(a+1,a+n+1); int ans=0; for(int i=1; i<=n; i++) { int sum=0; for(int j=i; j>=1; j--) { if(a[i]-a[j]<=k) { sum+=a[j]; } else break; } ans=max(ans,sum); } cout<<ans<<"\n"; }
上一题 下一题