大佬求助,此题蒟蒻不会
  • 板块学术版
  • 楼主yuxiaoyi2012
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/18 16:50
  • 上次更新2024/8/18 19:51:36
查看原帖
大佬求助,此题蒟蒻不会
1121724
yuxiaoyi2012楼主2024/8/18 16:50

【问题描述】 Kobe有N元钱,M个商品可以选择,每个商品有一定的价格P。他对每个商品有不同的满意度F,希望在花费不超过N元的情况下,使得买到的商品的满意度总和最大。 【输入文件】 第一行为N,第二行为M 第三行到第M+2行为两个数,分别为商品的价格P和满意度F 【输出文件】 买到的商品的最大满意度总和. 【样例输入】 47.13 4 17.11 2 11.48 1 18.42 2 30.01 2 【样例输出】 5 【数据规模】 对于40%的数据有: 0<=N<=100且N小数点后有两位小数 1<=M<=100 对于100%的数据有: 0<=N<=10000且N小数点后有两位小数 1<=M<=10000 1<=F<=2且F为整数 0<=P<=100且P小数点后有两位小数

该代码错误:

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
using namespace std;
double n;
int m;
struct node {
    double p;
    int f;
};
node d[10001];
bool cmp(node a, node b) {
    if (a.p < b.p)
        return 1;
    else if (a.p == b.p)
        if (a.f > b.f)
            return 1;
        else
            return -1;
    else
        return -1;
}
int main() {
    scanf("%f", &n);
    scanf("%d", &m);
    for (int i = 0; i < m; i++) scanf("%f %d", d[i].p, d[i].f);
    sort(d, d + m, cmp);
    int sum = 0;
    for (int i = 0; i < m; i++) {
        if (n < d[i].p) break;
        sum += d[i].f;
        n = n - d[i].p;
    }
    printf("%d",sum);
    return 0;
}
2024/8/18 16:50
加载中...