题解 | #最大报销额#

最大报销额

https://www.nowcoder.com/practice/8ec050ca75d343cfb45a305f5a7baa73

#include <iostream>
#include <queue>
using namespace std;
priority_queue<double> heap;
double ans;
//深搜回溯求最大和
//直接贪心取值无法ac,浮点数没法dp
//把money都乘以100,小数点后两位映射到整数,就可以背包
void dfs(double sum, double q)
{
    if(sum > q) return;
    else ans = max(ans, sum);
    if(heap.empty()) return;
    double tmp = heap.top();
    heap.pop();
    //当前堆顶是否加入sum中进行深搜
    dfs(sum, q), dfs(sum + tmp, q);
    heap.push(tmp);
}
bool valid(char a, double p)
{
    if(a == 'A' || a == 'B' || a == 'C') return p <= 600.00;
    return false;
}
int main() {
    double q; 
    int n, m;
    bool flag;
    while (cin >> q >> n && n) { // 注意 while 处理多个 case
        heap = priority_queue<double>();
        while(n --)
        { 
            flag = true;
            cin >> m;
            double sum = 0.0;
            while(m --)
            {
                char a, b;
                double p;
                cin >> a >> b >> p;
                flag &= valid(a, p);
                sum += p;
            }
            if(flag && sum <= 1000 && sum <= q) 
            {
                heap.push(sum);
                // cout <<"valid : " <<sum << endl;
            }
        }
        ans = 0;
        dfs(0.0, q);
        printf("%.2lf\n", ans);
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务