C++和Java两个版本
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int n, B;
struct Gift
{
int p, s;
bool operator< (const Gift& g) const
{
return p + s < g.p + g.s;
}
}g[N];
int main(){
scanf("%d%d", &n, &B);
for(int i = 0; i < n; i ++) scanf("%d%d", &g[i].p, &g[i].s);
sort(g, g + n);
int res = 0;
for(int k = 0; k < n; k ++)
{
int tot = B - (g[k].p / 2 + g[k].s);
if(tot < 0) continue;
int cnt = 1;
for(int i = 0; i < n; i ++)
if(i != k && tot >= g[i].p + g[i].s)
{
tot -= g[i].p + g[i].s;
cnt ++;
}
res = max(res, cnt);
}
printf("%d", res);
}
Java 代码
import java.util.Arrays;
import java.util.Scanner;
class Gift implements Comparable<Gift>{
int p;
int s;
public Gift(int p, int s) {
this.p = p;
this.s = s;
}
@Override
public int compareTo(Gift o) {
return (this.p + this.s) - (o.p + o.s);
}
}
public class Main {
static final int N = 1010;
static int n, B;
static Gift[] g;
static Scanner scanner;
public static void main(String[] args) {
scanner = new Scanner(System.in);
n = scanner.nextInt();
B = scanner.nextInt();
g = new Gift[n];
for(int i = 0; i < n; i ++){
g[i] = new Gift(scanner.nextInt(), scanner.nextInt());
}
Arrays.sort(g);
int res = 0;
for(int k = 0; k < n; k ++)
{
int tot = B - (g[k].p / 2 + g[k].s);
if(tot < 0) continue;
int cnt = 1;
for(int i = 0; i < n; i ++) {
if(i != k && tot >= g[i].p + g[i].s) {
tot -= g[i].p + g[i].s;
cnt ++;
}
}
res = Integer.max(res, cnt);
}
System.out.println(res);
}
}