1037 Magic Coupon

贪心算法实现
本文介绍了一个使用贪心算法实现的问题解决思路。通过两个数组的排序和配对计算最大化的乘积之和,该算法适用于非负数和非正数的情况。

想了个思路,网上搜一下是对的,然后自己实现了

才知道这就叫贪心

另外不用考虑那个数字<2^30

#include <stdio.h>
#include <algorithm>
#define len 100000+5

int NC, NP;
int c[len],p[len];

int cmp(const void * a, const void * b){//默认顺序也还是要定义一个 cmp
	return (*(int*)a - *(int *)b);
}

int main(){
	//freopen("in.txt","r",stdin);


	scanf("%d",&NC);
	for(int i = 0 ; i < NC; i++){
		scanf("%d",&c[i]);
	}
	scanf("%d",&NP);
	for(int i = 0 ; i < NP; i++){
		scanf("%d",&p[i]);
	}

	qsort(c,NC,sizeof(int),cmp);
	qsort(p,NP,sizeof(int),cmp);

	long long res = 0;

	for(int i = NC-1, j = NP-1; i >= 0 && j >= 0; i--,j--){
		if(c[i]>0 && p[j]>0){
			res += c[i]*p[j];
		}
	}

	for(int i =0, j = 0; i < NC && j < NP; i++,j++){
		if(c[i]<0 && p[j]<0){
			res += c[i]*p[j];
		}
	}

	printf("%lld",res);

}


转载于:https://my.oschina.net/kaneiqi/blog/304626

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值