zoukankan      html  css  js  c++  java
  • 洛谷 P1561 [USACO12JAN]爬山Mountain Climbing

    传送门

    题目大意:

    n头牛,上山时间为u(i),下山为d(i).

    要求每一时刻最多只有一头牛上山,一头牛下山。

    问每头牛都上下山后花费最少时间。

    题解:贪心

    推了推样例,发现上山时间一定,那找个下山最快

    的当最后一头山上的牛。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define LL long long
    #define N 25009
    using namespace std;
    
    int n;
    
    LL ans;
    int hh=12345677;
    
    struct Cows{
        int u,d;
    }c[N];
    
    bool cmp(Cows a,Cows b){
        return a.u<b.u;
    }
    
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&c[i].u,&c[i].d);
            ans+=c[i].u;hh=min(hh,c[i].d);
        }
        cout<<ans+hh;
        return 0;
    }
    70骗分

    发现正解和上面的结论是差不多的。

    a、总上山时间大于总下山时间

    这说明牛的总上山时间是恒定的,一定要记录答案的。

    记录答案的还有最后一头牛的下山时间,所以最终结果是

    总上山时间+牛最快的下山时间

    b、总下山时间大于总上山时间

    这说明牛的下山时间是恒定的,一定要记录答案的。

    记录答案的还有一头牛的上山时间,所以最终的结果

    是:总下山时间+最快牛的上山时间

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define LL long long
    using namespace std;
    
    int n;
    
    LL su,sd,mnu,mnd;
    
    int main(){
        scanf("%d",&n);
        mnu=mnd=100000000;
        for(int i=1;i<=n;i++){
            int up,down;
            scanf("%d%d",&up,&down);
            su+=up;sd+=down;
            if(up<mnu)mnu=up;
            if(down<mnd)mnd=down;
        }
        if(su>sd)cout<<su+mnd;
        else cout<<sd+mnu;
    //    cout<<max(su+mnd,sd+mnu);
        return 0;
    }
    View Code
  • 相关阅读:
    tomcat下的web.xml和项目中的web.xml
    tomcat日志详解
    tomcat日志及logback相关日志框架
    关于程序中使用servlet-api.jar和jsp-api.jar与服务器lib包jar包冲突的问题
    windows server数据库备份
    idea为tomcat设置虚拟地址
    GitHub
    MarkDown的用法
    SVN添加用户权限
    第一篇小记
  • 原文地址:https://www.cnblogs.com/zzyh/p/7792868.html
Copyright © 2011-2022 走看看