1037. Magic Coupon (25)
来源:互联网 发布:免费psd源码社区 编辑:程序博客网 时间:2024/04/28 00:31
1. 原题:https://www.patest.cn/contests/pat-a-practise/1037
2. 思路:
题意:
给出的信息很复杂,其实就是求两个集合中的数相乘后的和的最大值。
条件是每个数只能用1一次。
思路:
如何让和最大,显然乘积必须大于0.
于是我们就有了思路,排序后,两个最大的正数相乘或者两个最小的负数相乘。
实现就用vector,也可以用动态数组。
给出的信息很复杂,其实就是求两个集合中的数相乘后的和的最大值。
条件是每个数只能用1一次。
思路:
如何让和最大,显然乘积必须大于0.
于是我们就有了思路,排序后,两个最大的正数相乘或者两个最小的负数相乘。
实现就用vector,也可以用动态数组。
3. 源码(已AC):
#include<iostream>#include<algorithm>#include<vector>using namespace std;int main(void){//freopen("in.txt", "r", stdin);int nc, np;cin >> nc;vector<int> cou(nc);//奖券vectorfor (int i = 0; i < nc; i++)cin >> cou[i];cin >> np;vector<int> pro(np);//产品vectorfor (int i = 0; i < np; i++)cin >> pro[i];sort(cou.begin(), cou.end(), greater<int>());//降序sort(pro.begin(), pro.end(), greater<int>());int sum = 0, i, j;for (i = 0, j = 0; i < nc && j < np; i, j)//正数相乘的情况,从0开始{if ( cou[i] > 0 && pro[j] > 0)sum += cou[i++] * pro[j++];elsebreak;}for ( i = nc-1, j = np-1; i >= 0, j >= 0; i,j)//负数相乘,从尾端开始{if(cou[i] < 0 && pro[j] < 0)sum += cou[i--] * pro[j--];elsebreak;}cout << sum << endl;return 0;}
0 0
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 1037. Magic Coupon (25)
- 未名湖边的烦恼---递归
- BZOJ 1079: [SCOI2008]着色方案 神奇的DP
- POJ 1282 庆典的日期 中文
- ORACLE时间函数(SYSDATE)深入理解
- 23种设计模式
- 1037. Magic Coupon (25)
- uva11388
- RESTful架构与接口设计
- C#的STFT算法库
- 11.2.2
- 蓝桥杯算法提高 现代诗如蚯蚓
- 201604-1
- windows命令行窗口大小修改
- After Effects快捷键