zoukankan      html  css  js  c++  java
  • P1016 旅行家的预算——贪心

    P1016 旅行家的预算

    贪心求,在当前点如果能到达距离最近的油价比他小的就直接去油价比他小的,

    如果在可行范围内没有比他油价小的,就加满开到可行范围内油价最小的点;

    这么做是对的,我不会证明;

    还有就是,如果变量定义在外面了,在for循环里面就不要定义了,这个点卡了我一下午;

    一直停止运行……

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=520;
    typedef double dd;
    
    struct node
    {
        dd p,dis;
    }s[maxn];
    
    dd all_dis,capa,per_dis,st_p;
    int n;
    
    bool cmp(node qw,node we)
    {
        return qw.dis<we.dis;
    }
    
    dd ans_cost,last;
    int main()
    {
        scanf("%lf%lf%lf%lf%d",&all_dis,&capa,&per_dis,&st_p,&n);
        s[0].p=st_p;
        for(int i=1;i<=n;i++)
        {
            scanf("%lf%lf",&s[i].dis,&s[i].p);
        }
        s[n+1].dis=all_dis;
        for(int i=0;i<=n;i++)
        {
            if(s[i+1].dis-s[i].dis>capa*per_dis) 
            {
                printf("No Solution
    ");
                return 0;
            }
        }
        
        sort(s+1,s+n+1,cmp);
        for(int i=0;i<=n+1;)
        {
            int j,k;
            for(j=k=i+1;j<=n;j++)
            {
                k=(s[j].p<=s[k].p?j:k);
                if(s[j].p<=s[i].p||(s[j+1].dis-s[i].dis)>capa*per_dis) break;
            }
            if(s[j].p>s[i].p)
            {
                ans_cost+=(capa-last)*s[i].p;
                last=capa-((s[k].dis-s[i].dis)/per_dis);
                i=k;
            }
            else 
            {
                ans_cost+=((s[j].dis-s[i].dis)/per_dis-last)*s[i].p;
                last=0;
                i=j;
                
            }
        }
        printf("%.2lf",ans_cost);
        return 0;
    }
  • 相关阅读:
    poj 2352 Stars (树状数组)
    一.C语言:关键字、标识符和注释
    运算符:三目运算符,运算符优先级,sizeof,自增自减,取余
    ios app 上架AppStore
    为ios app添加广告条
    谓词
    正则表达式
    日期处理
    第一次往github上传文件步骤
    codeforce 375_2_b_c
  • 原文地址:https://www.cnblogs.com/WHFF521/p/11636845.html
Copyright © 2011-2022 走看看