• 【积累】排序题积累


    洛谷P1417

    挺好的一道排序题了。

     主要是不会怎么去排序。然后就是01背包。

    洛谷的题解说得很好。有详细的cmp推导。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    const int maxn=1e5+50;
    struct P{
        ll a,b,c;
        bool operator <(const P&p)const{return p.b*c<b*p.c;}
    }p[maxn];
    int main()
    {
        ll n,T,i,j,k,t,w,ans=0;
        ll f[maxn]={0};
        scanf("%lld%lld",&T,&n);
        for(i=1;i<=n;i++)scanf("%d",&p[i].a);
        for(i=1;i<=n;i++)scanf("%d",&p[i].b);
        for(i=1;i<=n;i++)scanf("%d",&p[i].c);
        sort(p+1,p+1+n);
        for(i=1;i<=n;i++)
        {
            for(j=T;j>=p[i].c;j--)
            {
                f[j]=max(f[j],f[j-p[i].c]+p[i].a-p[i].b*j);
                ans=max(ans,f[j]);
            }
        }
        printf("%lld
    ",ans);
    }

    2019-09-09 23:11:21

    /////////////////////////////

    Fight Against Monsters

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=5e5+50;
    const int inf=0x3f3f3f3f;
    ll atk,tim;
    struct P{
        ll h,a;
        bool operator <(const P&p)const{return a*p.h>p.a*h;}
    };
    int main()
    {
        ll a[550]={0};
        for(int i=1;i<=500;i++)
        {
            a[i]=i*(i+1)/2;
        }
        int T,u;
        scanf("%d",&T);
        P p[maxn];
        for(u=1;u<=T;u++)
        {
            ll n,i,ans=0,t,j,num=0;
            atk=0;tim=0;
            scanf("%lld",&n);
            for(i=1;i<=n;i++)
            {
                scanf("%lld%lld",&p[i].h,&p[i].a);
                atk+=p[i].a;
                t=lower_bound(a,a+500,p[i].h)-a;
                p[i].h=t;       
                tim+=t;
            }
            sort(p+1,p+1+n);
            for(i=1;i<=n;i++)
            {
                ans+=atk*p[i].h;
                atk-=p[i].a;
            }
            printf("Case #%d: ",u);
            printf("%lld
    ",ans);
        }

    //////////////////////////////////

    特别水的排序题 然而我想得特别复杂,结果它其实特别水。洛谷P2945

    #include<bits/stdc++.h>
    #define debug printf("!")
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+50;
    int n,x,y;
    inline int get(int a,int b)
    {
        if(a>b)return (a-b)*y;
        return (b-a)*x;
    }
    int main()
    {
        int i,j,k,m[maxn],b[maxn],ans=0;
        scanf("%d%d%d",&n,&x,&y);
        for(i=0;i<n;i++)
            scanf("%d%d",&m[i],&b[i]);
        sort(b,b+n);
        sort(m,m+n);
        for(i=0;i<n;i++)ans+=get(m[i],b[i]);
        printf("%d
    ",ans);
    }

     /////////////////////////////////////////////

  • 相关阅读:
    python的基础爬虫(利用requests和bs4)
    R语言时间序列中的时间设置
    PHP扩展开发(6)
    PHP扩展开发(5)
    kafka安装及Kafka-PHP扩展的使用
    brew 更换国内源(镜像)
    PHP扩展开发(4)
    PHP扩展开发(3)-config.m4
    PHP扩展开发(2)
    PHP扩展开发(1)-创建基础框架
  • 原文地址:https://www.cnblogs.com/kkkek/p/11479397.html
Copyright © 2020-2023  润新知