题目

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1267

题意

田忌赛马,问最多能赢到多少钱?每局200元

思路

明显,把田忌的赛马排列一下,从速度高到低,齐王的也从高到低排列,当前田忌最高的赛马无法处理齐王最高的赛马,则换成田忌最慢的赛马去碰瓷。

难在如何处理平局-也就是速度相同的赛马。

有的时候本可以平局,但是最好先认输一局-换用目前最慢的赛马去碰瓷一下,然后当前这匹赛马与接下来比它弱的赛马比试,这样做胜一局负一局,收益为0,与直接平局是相同的。但是优点在于额外用田忌的驽马解决了一匹齐王的好马。

那么,何时直接平局,何时解决额外的马呢?

不妨看看目前的驽马,如果当前自己最慢的马还能解决齐王的最慢马,那么优先让这个对局发生。直到自己最慢的马无法解决齐王最慢的马,此时用这匹驽马来额外解决齐王的快马。

感想

1. 一开始只想到越高越好,从高到低直接处理,没有考虑到当前自己最慢的马还能解决齐王的最慢马这种情况,导致没法选择何时应该主动放弃平局。

2. 之后用了DP,太慢

3. 不只处理一端,也处理另一端以理清局面

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 1e3 + 3;
typedef pair<int, int> Pair;
int a[MAXN];
int b[MAXN];
int n;
int main() {
int T;
//scanf("%d", &T);
freopen("C:\\Users\\Iris\\source\\repos\\ACM\\ACM\\input.txt", "r", stdin);
//freopen("C:\\Users\\Iris\\source\\repos\\ACM\\ACM\\output.txt", "w", stdout);
for (int ti = 1; scanf("%d", &n) == 1 && n; ti++) {
for (int i = 0; i < n; i++) {
scanf("%d", a + i);
}
sort(a, a + n);
for (int i = 0; i < n; i++) {
scanf("%d", b + i);
}
sort(b, b + n);
int ans = 0;
for (int ai = n - 1, astart = 0, bi = n - 1, bstart = 0; ai >= astart && bi >= bstart; ) {
while (bi >= 0 && a[ai] < b[bi]) {
bi--;
ans--;
astart++;
}
if (bi >= 0) {
if (a[ai] > b[bi]) {
ans++;
bi--;
ai--;
}
else {
while (ai >= astart && bi >= bstart && a[astart] > b[bstart]) {
ans++;
astart++;
bstart++;
}
if (ai >= astart && bi >= bstart && a[astart] < b[bi]) {
astart++;
bi--;
ans--;
}
else {
break;
}
}
}
}
printf("%d\n", ans * 200);
}
return 0;
}

  

UVa LA 3266 - Tian Ji -- The Horse Racing 贪心,不只处理一端,也处理另一端以理清局面 难度: 2的更多相关文章

  1. UVaLive 3266 Tian Ji -- The Horse Racing (贪心)

    题意:田忌赛马,每胜一局就得200,负一局少200,问最多得多少钱. 析:贪心,如果最快的马比齐王的还快,就干掉它,如果最慢的马比齐王的马快,就干掉它,否则用最慢的马去和齐王最快的马比. 代码如下: ...

  2. POJ-2287.Tian Ji -- The Horse Racing (贪心)

    Tian Ji -- The Horse Racing Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 17662   Acc ...

  3. hdu_1052 Tian Ji -- The Horse Racing 贪心

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  4. UVALive - 3266 Tian Ji -- The Horse Racing(贪心)

    题目链接 题意 两人赛马,每居获胜得200,平局无事发生,输了也输200.求最优的策略使赢的钱最多. 分析 排序,从最快的开始比,若比不过,则用最弱的消耗最强的.模拟即可. #include<i ...

  5. HDU 1052 Tian Ji -- The Horse Racing(贪心)

    题目来源:1052 题目分析:题目说的权值匹配算法,有点误导作用,这道题实际是用贪心来做的. 主要就是规则的设定: 1.田忌最慢的马比国王最慢的马快,就赢一场 2.如果田忌最慢的马比国王最慢的马慢,就 ...

  6. HDU-1052 Tian Ji -- The Horse Racing 贪心 考虑特殊位置(首尾元素)的讨论

    题目链接:https://cn.vjudge.net/problem/HDU-1052 题意 田忌赛马问题扩展版 给n匹马,马的能力可以相同 问得分最大多少 思路 贪心做得还是太少,一开始一点思虑都没 ...

  7. UVA 1344 Tian Ji -- The Horse Racing

    Tian Ji -- The Horse Racing Here is a famous story in Chinese history. That was about 2300 years ago ...

  8. Hdu 1052 Tian Ji -- The Horse Racing

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  9. Tian Ji -- The Horse Racing

    Tian Ji -- The Horse Racing Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Jav ...

随机推荐

  1. 【Mongo】安装并配置副本集

    最近的一个小项目需要用到mongo,所以开始学习下mongo.本打算开三台虚机严格按照生产来配置,然后发现有点带不动,所以决定在一台上通过三个端口来模拟. 1.获取安装包 curl -O http:/ ...

  2. 认识LDAP协议

    LDAP LDAP是Lightweight Directory Access Protocol的缩写,顾名思义,它是指轻量级目录访问协议(这个主要是相对另一目录访问协议X.500而言的:LDAP略去了 ...

  3. Python3 tkinter基础 Text image 文本框中插入图片

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. HDU 1024 Max Sum Plus Plus【DP】

    Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we ...

  5. 【新特性】JDK1.8

    一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的 ...

  6. 工具类封装之--BaseController

    package cn.xxx.base; import cn.xxx.gecustomer.beans.GeCustomer; import cn.xxx.gecustomer.beans.GeCus ...

  7. Oracle update语句更新值来自另一张表中的数据

    task 任务表 role 角色表 两表之间必须有关联的字段 update task t set t.roleName = ( select r.name from role r where r.id ...

  8. windows主用python3 个别程序使用python2的方法

    原始需求: 平时执行命令都默认用python3,遇到个别程序需要python2的时候也能用python2. 实现: 1.先装python3,添加环境变量,这时在cmd里输入python可以显示出是版本 ...

  9. 二、Python数据类型(一)

    一.Python的基本输入与输出语句 (一)输出语句 print() 示例: print('你好,Python') print(4+5) a = 10 print(a) 输出的内容可以是字符串,变量, ...

  10. GC知识记录

    2.关于Minor GC,Major GC与Full GC 1)  Minor GC:即新生代的GC,指发生在新生代的垃圾收集动作.当新生代的Eden区内存不足时,就会触发Minor GC.由于对象创 ...