返回顶部

Educational Codeforces Round 94 (Rated for Div. 2) B. RPG Protagonist (数学)

  • 题意:你和你的随从去偷剑和战斧,你可以最多可以拿\(p\)重的东西,随从可以拿\(f\)重的东西,总共有\(cnt_{s}\)把剑,\(cnt_{w}\)把战斧,每把剑重\(s\),战斧重\(w\),问你和随从最多能拿的剑和战斧的总和是多少?

  • 题解:首先,肯定谁轻就先拿谁,我们就令剑是轻的,然后算一下我自己最多能拿多少剑,从\(0\)开始枚举我拿的剑的个数,我先拿剑,然后随从拿剑,然后我再拿战斧,然后随从再拿战斧,维护一个最大值.这题关键这个枚举的方法不好想.

  • 代码:

    int t;
    int p,f;
    int cnts,cntw;
    int w,s;
    int ans=0;
     
    int main() {
        //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
        t=read();
        while(t--){
            ans=0;
            p=read();
            f=read();
            cnts=read();
            cntw=read();
            s=read();
            w=read();
     
            if(s>w){
                swap(s,w);
                swap(cnts,cntw);
            }
            int mx=min(p/s,cnts);
            for(int i=0;i<=mx;++i){
                int rems=cnts-i,remw=cntw;
                int now=i;
                int remp=p-s*i,remf=f;
                int tmp=min(remf/s,rems);
                remf-=tmp*s;
                now+=tmp;
                tmp=min(remp/w,remw);
                remw-=tmp;
                now+=tmp;
                tmp=min(remf/w,remw);
                now+=tmp;
                ans=max(ans,now);
            }
            printf("%d\n",ans);
        }
     
        return 0;
    }
    
posted @ 2020-09-05 19:24  _Kolibri  阅读(156)  评论(0)    收藏  举报