7-39 魔法优惠券
题目链接:
传送门
题目描述:
在火星上有个魔法商店,提供魔法优惠券。每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免费赠品的时候使用面值为正的优惠劵,则必须倒贴给商店K倍该商品价值的金额…… 但是不要紧,还有面值为负的优惠劵可以用!(真是神奇的火星)
例如,给定一组优惠劵,面值分别为1、2、4、-1;对应一组商品,价值为火星币M$7、6、-2、-3,其中负的价值表示该商品是免费赠品。我们可以将优惠劵3用在商品1上,得到M$28的回报;优惠劵2用在商品2上,得到M$12的回报;优惠劵4用在商品4上,得到M$3的回报。但是如果一不小心把优惠劵3用在商品4上,你必须倒贴给商店M$12。同样,当你一不小心把优惠劵4用在商品1上,你必须倒贴给商店M$7。
规定每张优惠券和每件商品都只能最多被使用一次,求你可以得到的最大回报。
输入格式:
输入有两行。第一行首先给出优惠劵的个数N,随后给出N个优惠劵的整数面值。第二行首先给出商品的个数M,随后给出M个商品的整数价值。N和M在[1, 106 ]之间,所有的数据大小不超过230,数字间以空格分隔。
输出格式:
输出可以得到的最大回报。
输入样例:
4 1 2 4 -1
4 7 6 -2 -3
输出样例:
43
题目思路:
本题可以用贪心算法解决,每次使用绝对值最大且同号的优惠券和商品,若无同号则不使用。
参考代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int n,m;
int a[1000001];
int b[1000001];int cmp(const void *a,const void *b)
{int* pa=(int*)a;int* pb=(int*)b;int num1=*pa;int num2=*pb;return num2-num1;
}int main()
{int i,max=0;memset(a,0,sizeof(a));memset(b,0,sizeof(b));scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);scanf("%d",&m);for(i=0;i<m;i++)scanf("%d",&b[i]);qsort(a,n,sizeof(a[0]),cmp);qsort(b,m,sizeof(b[0]),cmp);int head=0,tail1=n-1,tail2=m-1;//head从最大值起,tail从最小值起(可能为负)while(a[head]>0&&b[head]>0&&head<n&&head<m){//如果最大值同为正数则从最大值(也即绝对值最大)开始累加。max+=a[head]*b[head];head++;}while(a[tail1]<0&&b[tail2]<0&&tail1>head&&tail2>head){//最大值为负数则从末尾开始累加,或从头累加至不同号再继续累加同为负数的情况。max+=a[tail1]*b[tail2];tail1--;tail2--;}printf("%d",max);return 0;
}
参考资料传送门:
传送门
7-39 魔法优惠券相关推荐
- 7-39 魔法优惠券 (25 分)(思路加解释 用容器做的)加油兄弟们
一:题目 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免 ...
- R7-8 魔法优惠券 (25 分)
R7-8 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值 ...
- 用JAVA实现魔法优惠券
7-9 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的 ...
- 数据结构PTA 基础实验7-2.1 魔法优惠券
基础实验7-2.1 魔法优惠券 题目 解法 题目 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费 ...
- 基础实验 7-2.1 魔法优惠券(25 分)
在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值 K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免费赠品的 ...
- 基础实验7-2.1 魔法优惠券 (贪心)
在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值的商品,但是如果你在领取免费赠品的时 ...
- PTA 7-39 魔法优惠券 (25 分)
7-39 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵,可以得到K倍该商品价值的回报!该商店还免费赠送一些有价值 ...
- 数据结构与算法题目集7-39 魔法优惠券(c语言实现)
原题链接 这道题最主要的问题其实是排序,再接下来要搞清楚如何求得最大收益. 最大收益=最大正的优惠卷x最大正的商品+最大负的优惠卷x最大负的商品 这里强烈推荐大家使用qsort函数! #include ...
- PTA 数据结构与算法题目集(中文)
一:数据结构与算法题目(中文版) 7-2 一元多项式的乘法与加法运算 (20 分) 7-3 树的同构 (25 分) 7-4 是否同一棵二叉搜索树 (25 分) 7-6 列出连通集 (25 分)(详解) ...
最新文章
- 如何利用CycleGAN实现男女性别转换
- 渲染树构建、布局及绘制
- 对SPA(单页面应用)的总结
- python导出数据找不到csv_【记录】使用Python读取/导出(写入)CSV文件
- Java高并发入门-线程初步(二)
- Log42j 源代码分析:plugin(插件)机制
- python中easygui有几种_Python 模块EasyGui详细介绍
- java json 多余属性,fastjson支持JSON字符串解析到指定类型的JavaBean时的多余属性么?...
- 脚本放在 body 元素的底部
- Xcode 快速开发 代码块
- Java开发笔记(一百三十三)Swing的菜单
- 关于将网易有道词典单词本导出到必应词典生词本的尝试
- 页面开机自启动,页面置顶显示,页面持续获得焦点,鼠标点击器源码
- 微信小程序开发中医药配方小程序药方后台管理系统|前后分离VUE.js
- xrd精修教程_XRD精修教程.pdf
- python修改pdf内容_如何编辑pdf文件,替换其数据?
- 用JavaScript写一个简单的网页倒计时插件
- oracle-DDL对表的操作
- 浙江大学-翁凯 C语言进阶,编程题
- R语言与RStudio的下载与安装方法