[offer收割]编程联系赛2-A 买零食



题目1 : 买零食

时间限制: 5000ms
单点时限: 1000ms
内存限制: 256MB

描述

小Ho很喜欢在课间去小卖部买零食。然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称。第一次去一教小卖部买零食的时候,小Ho由于不懂事买了好一大堆东西,被小卖部姐姐给了一个“冷若冰霜”的眼神,食欲都下降了很多。

从那以后,小Ho就学乖了,去小卖部买东西只敢同时买3包以内的零食,并且价格加起来必须是5的整数倍,方便小卖部姐姐算价格。

但是小Ho不擅长计算,所以他把小卖部里所有零食的价格以及他对这个零食的渴望度都告诉了你,希望你能够帮他计算出在不惹恼小卖部姐姐的前提下,能够买到零食的渴望度之和最高是多少?

输入

每个输入文件包含多组测试数据,在每个输入文件的第一行为一个整数Q,表示测试数据的组数。

每组测试数据的第一行为一个正整数N,表示小卖部中零食的数量。

接下来的N行,每行为一个正实数A和一个正整数B,表示这种零食的价格和小Ho对其的渴望度。

一种零食仅有一包。

对于100%的数据,满足1 <= Q <= 10,1<=N<=50,0<A<=10,1<=B<=100。

对于100%的数据,满足A的小数部分仅可能为0.5或0。

输出

对于每组测试数据,输出一个整数Ans,表示小Ho可以获得最大的渴望度之和。

样例输入
1
4
0.5 6
4.5 7
5.0 4
2.0 9
样例输出
17

分析:
    看完题目第一反应是DFS,原理很简单,两种情况,要么第i件食品加入,要么就不加入,加入后整个数量和渴望值会变化,然后进行递归,终止递归条件是食品数量超过3包或者遍历完所有食品。
代码:
    
#include <iostream>

using namespace std;

int ASP = 0, N;
int pri[55], asps[55];

void DFS(int cur, int sum, int asp, int n)
{
    if(sum && sum%50 == 0 && n <= 3)//判断条件是否符合
    {
        if(asp > ASP)
            ASP =asp;
    }
    if(n > 3 || cur ==N)//递归终止条件
        return;
    DFS(cur+1, sum, asp, n);//不加入第cur件食品
    DFS(cur+1, sum+pri[cur], asp+asps[cur], n+1);//加入第cur件食品
}



int main()
{
    cin >> N;
    for(int i=0;i<N;i++)
    {
        double a;
        cin >> a >> asps[i];
        pri[i] = static_cast<int>(a*10);
    }
    DFS(0,0,0,0);
    cout << ASP << endl;

    return 0;
}

题目1 : 买零食

时间限制: 5000ms
单点时限: 1000ms
内存限制: 256MB

描述

小Ho很喜欢在课间去小卖部买零食。然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称。第一次去一教小卖部买零食的时候,小Ho由于不懂事买了好一大堆东西,被小卖部姐姐给了一个“冷若冰霜”的眼神,食欲都下降了很多。

从那以后,小Ho就学乖了,去小卖部买东西只敢同时买3包以内的零食,并且价格加起来必须是5的整数倍,方便小卖部姐姐算价格。

但是小Ho不擅长计算,所以他把小卖部里所有零食的价格以及他对这个零食的渴望度都告诉了你,希望你能够帮他计算出在不惹恼小卖部姐姐的前提下,能够买到零食的渴望度之和最高是多少?

输入

每个输入文件包含多组测试数据,在每个输入文件的第一行为一个整数Q,表示测试数据的组数。

每组测试数据的第一行为一个正整数N,表示小卖部中零食的数量。

接下来的N行,每行为一个正实数A和一个正整数B,表示这种零食的价格和小Ho对其的渴望度。

一种零食仅有一包。

对于100%的数据,满足1 <= Q <= 10,1<=N<=50,0<A<=10,1<=B<=100。

对于100%的数据,满足A的小数部分仅可能为0.5或0。

输出

对于每组测试数据,输出一个整数Ans,表示小Ho可以获得最大的渴望度之和。

样例输入
1
4
0.5 6
4.5 7
5.0 4
2.0 9
样例输出
17

分析:
    看完题目第一反应是DFS,原理很简单,两种情况,要么第i件食品加入,要么就不加入,加入后整个数量和渴望值会变化,然后进行递归,终止递归条件是食品数量超过3包或者遍历完所有食品。
代码:
    





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《后端 offer 收割机养成指南》是一本有关后端技术与求职的指南,主要面向想要成为后端工程师的人群。这份PDF提供了一些实用的技术知识和求职建议,有助于读者了解后端技术的要点和掌握核心技能。 首先,这本指南详细介绍了后端工程师的职责和岗位要求。后端工程师主要负责构建和维护服务器端的数据处理逻辑和业务逻辑。他们需要具备扎实的编程基础,熟悉常用的后端开发语言和框架,如Java、Python、Node.js等,并能够熟练使用数据库。 指南中还介绍了一些后端工程师常用的技术栈和工具,如RESTful API、微服务架构、消息队列等。这些技术和工具是现代后端开发中不可或缺的组成部分,掌握它们将有助于提升后端工程师的工作效率和开发质量。 此外,这本指南还分享了一些求职的经验和建议。它提供了寻找后端工程师职位的途径和方法,并给出了一些面试准备和面试技巧。通过学习这些经验和建议,读者可以更好地应对后端工程师的面试挑战,并提升自己的求职竞争力。 总而言之,《后端 offer 收割机养成指南》是一本对于想要成为后端工程师的人们非常有价值的指南。它不仅提供了掌握后端技术的核心知识和技能,还分享了求职方面的经验和建议。希望这本指南对读者在后端领域的学习和求职之路上有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值