一道贪心题-HDU-1052
来源:互联网 发布:淘宝怎么会有苏宁易购 编辑:程序博客网 时间:2024/05/07 06:55
本题故事是由田忌赛马引起的,但是什么田忌赛马的我是不管咯啊。废话不多说,先把题目大概意思讲一下:路人甲和路人乙各有n匹马,现在给出了这些马的速度,如何匹配这些马儿使得路人甲获得最大利益?(ps:赢一场得200积分,输一场减去200积分,平局不增不减)。
分析:这题目是我在题目分类中看到的一道贪心题。我们可以把它做如下分类;
1、路人甲的最快马速度 > 路人乙的最快马速度, 则该两匹马匹配;
2、路人甲的最快马速度 < 路人乙的最快马速度,则用路人甲的最慢马与路人乙的最快马匹配;
3、路人甲的最快马速度 = 路人乙的最快马速度:(a)路人甲的最慢马速度 > 路人乙最慢马速度,该两匹最慢马匹配;
(b)路人甲的最慢马速度 <= 路人乙的最慢马速度,路人甲的最慢马与路人乙的最快马匹配。
这是解决该题目的分类情况。详细分析请参考:http://blog.csdn.net/qzh3578/article/details/12707889
#include<stdio.h>#include<algorithm>using namespace std;bool cmp(int x,int y){ return x>y;}int main(){ int n; while(scanf("%d",&n)!=EOF&&n!=0) { int a[1005],b[1005]; for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) scanf("%d",&b[i]); sort(a,a+n,cmp); sort(b,b+n,cmp); int head1=0,tail1=n-1; int head2=0,tail2=n-1; int sum=0; while(head1<=tail1) { if(a[head1]>b[head2]) { sum+=200; head1++; head2++; } else if(a[head1]<b[head2]) { sum-=200; tail1--; head2++; } else { if(a[tail1]>b[tail2]) { sum+=200; tail1--; tail2--; } else { if(a[tail1]<b[head2]) sum-=200; tail1--; head2++; } } }printf("%d\n",sum); }return 0;}
0 0
- 一道贪心题-HDU-1052
- 一道贪心题
- 水一道贪心——hdu 1009
- 九月的尾巴,一道贪心 1789 hdu
- poj2586 贪心水题一道(一步贪心)
- 贪心的一道题 Supermarket
- hdu 2570 //这题想到贪心法有些曲折哈 是一道简单的贪心算法(最优装载问题)
- hdu 4864 这是2014多校联合一道贪心题
- 一道无语的贪心题......
- 又是一道贪心题 活动选择
- 时间序列贪心(第一道贪心题呀嘻嘻)
- hdu 1052贪心算法
- hdu 1052 贪心
- hdu 1052 贪心
- HDU 1052(贪心)
- hdu 1052 贪心
- HDU 1052(贪心)
- 一道算法题:(背包,贪心,动态规划)
- 最大连续子序列和
- MySQL中的float和decimal类型float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,
- ASP.NET-FineUI开发实践-5
- 【环境配置】常用软件
- 图像处理界的标准图像Lena背后的故事
- 一道贪心题-HDU-1052
- WM_ENTERIDLE
- linux内核基本概述
- gmail 删除所有邮件
- 用户登录失败,该用户与可信SQL Server连接无关联,错误:18452
- 不同系统换行符问题
- HDOJ1090
- Swift编程语言学习4.1——循环
- 合并 oracle merge into 用法