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


    题目链接:https://cn.vjudge.net/problem/HDU-1052

    题意

    田忌赛马问题扩展版
    给n匹马,马的能力可以相同
    问得分最大多少

    思路

    贪心做得还是太少,一开始一点思虑都没有的
    这里稍微总结一下如何打开思路吧

    1. 特殊位置开始考虑是否存在某种必然性,包括不限于序列首尾
    2. 若讨论难以进行,试着把这个讨论点展开,换个角度(或者换个特殊位置)讨论

    首先排序
    其次的关键是讨论尾元素是否必胜或必败,思考贪心
    在一个关键是双方尾元素相同时,展开考虑首元素是否必胜或必败,思考贪心
    当首尾元素各相等时,用我们最慢马比齐王最快马,这里需要认真证明,但可能考虑不到证法(这里可能需要总结规律?)。。。

    提交过程

    AC 没有思路,看得以前的代码AC的:(

    代码

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int main(void){
        int n, a[1020], b[1020];
    
        while (scanf("%d", &n)==1 && n){
            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); sort(b, b+n);
    
            int head=0, last=n-1, alast=n-1, i=0, cnt=0;
            while (i<=alast){
                if (b[i]<a[head]){
                    head++; cnt++; i++;
                }else if (b[i]>a[head]){
                    head++; alast--; cnt--;
                }else if (b[i]==a[head]){
                    if (b[alast]<a[last]){
                        alast--; last--; cnt++;
                    }else if (b[alast]>a[last]){
                        alast--; head++; cnt--;
                    }else{
                        if (a[head]<b[alast]) cnt--;
                        else if (a[head]>b[alast]) cnt++;
                        alast--; head++;
                    }
                }
            }printf("%d
    ", cnt*200);
        }
    
        return 0;
    }
    
    
    Time Memory Length Lang Submitted
    46ms 1596kB 970 G++ 2018-06-23 11:35:55
  • 相关阅读:
    Flask商城项目详解
    《剑指offer》题解(Python版本)
    小程序学习笔记
    Html5 语义化标签
    常用页面布局
    css 语法记录
    vue-router 配置
    axios 配置
    Mybatis Generator
    openssl_pkcs7_verify的问题之旅
  • 原文地址:https://www.cnblogs.com/tanglizi/p/9219030.html
Copyright © 2020-2023  润新知