zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    api.js
    vue开关
    vue 单选框自定义
    vue 笔记
    Flutter 检测网络连接 监听网络变化
    lutter 调用原生硬件 Api 实现扫码
    flutter 支付宝支付流程以及用 Flutter 在 Android Ios 中实现支付宝支付
    js+css 动效+1的效果
    Vue -- filters 过滤器、倒计时效果
    移动端如何实现两行点点点?
  • 原文地址:https://www.cnblogs.com/tanglizi/p/9219030.html
Copyright © 2011-2022 走看看