• HDU1052 田忌赛马 贪心


    一开始就知道是贪心,读入a[n],b[n],排序使数组降序排列,表示马从强到弱。
    对于齐威王的每一匹马:

    • 比得过就比
    • 比不过就用我最弱的马跟对手最强的马比

    如果马都是互异的,即a[n]中无重复数字,b[n]中无重复数字,那么上面的贪心是正确的。
    怕就怕,a[n]和b[n]中包含很多重复的数字。

    上面的贪心有一个问题,如果平了咋办?这就有一个原理:拒绝平局。
    举个例子立马明白:
    5 5 3 2
    5 5 4 3
    如果让前两局平局,那么后两局太吃亏了。不如前两局放弃,后两局还可一搏。所以:如果我最强马与对手最强马相等,则以我驽马应之。这样一来,我不赔(也赚不了):

    • 我驽马与对手最强马相等,说明我全部的马都一样,从最强到最弱速度都相等,怎么比都可以(不赔)。
    • 我驽马比对手最强马弱,则我的最强马以后可能会扳回一局,相当于和棋(不赔);如果我的最强马无法扳回一局,说明对手的马都相等,怎么比都可以(不赔)。
    • 我驽马比对手最强马强,这是不可能的,因为已经排序过了,连我最强马都是勉强平局,我最劣马定然不能胜。

    一言以蔽之,上面这种法则能够将“一平一败”(-200)扭转为“一败一胜”(0)

    于是得到新的贪心:

    • 能胜则比
    • 不能胜则以驽马应之

    这样依然有问题,考虑下面情况:
    田忌:3 3 2
    威王:3 2 1
    不能胜则以驽马应之,第一局我最劣马(2)应彼最强马(3),我败。我的最劣马(2)感到很委屈,它觉得自己明明可以跟威王最差的马(1)一较高下大胜一场。
    所以得到最后的贪心:

    • 我最强马能胜敌最强马,干
    • 我最弱马能胜敌最弱马,干
    • 否则,不得已必败一场,以我最弱马战敌最强马
    #include<iostream>
    #include<stdio.h> 
    #include<list>
    #include<queue>
    #include<stdlib.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int maxn = 1007;
    int a[maxn], b[maxn];
    bool cmp(const int &x, const int&y){
    	return y < x;
    }
    int main(){
    	freopen("in.txt", "r", stdin); 
    	int n;
    	while (cin >> n&&n){
    		for (int i = 0; i < n; i++){
    			cin >> a[i];
    		}
    		for (int i = 0; i < n; i++){
    			cin >> b[i];
    		}
    		sort(a, a + n,cmp);
    		sort(b, b + n,cmp);
    		int ans = 0;
    		int beg = 0,over=n-1;
    		int from = 0, to = n - 1;
    		for (int i = 0; i<n;i++){
    			if (a[beg] > b[from]){
    				beg++;
    				from++;
    				ans++;
    			}
    			else if (a[over] > b[to]){
    				over--;
    				to--;
    				ans++;
    			}
    			else { 
    				if (a[over]<b[from])ans--;
    				over--;
    				from++;
    			}
    		}
    		cout << ans * 200L << endl;
    	}
    }
    
  • 相关阅读:
    刷题力扣面试题 10.03. 搜索旋转数组
    刷题力扣面试题 10.05. 稀疏数组搜索
    刷题力扣面试题 08.10. 颜色填充
    刷题力扣面试题 10.11. 峰与谷
    刷题力扣面试题 10.09. 排序矩阵查找
    刷题力扣面试题 08.13. 堆箱子
    刷题力扣面试题 08.11. 硬币
    刷题力扣面试题 10.02. 变位词组
    刷题力扣面试题 16.02. 单词频率
    Windows下phpstudy安装PHP扩展yaml
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/6552495.html
Copyright © 2020-2023  润新知