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


    题意:两个大小为m1,m2的背包,有n1个体积v1的物品,n2个体积v2的物品,价值均为1,最大化价值

    这个范围到int,显然不能DP了

    最优化,肯定是贪心了,但是变量太多,怎么做呢(思维退化严重..)

    不妨让v1<v2,那肯定是优先装v1

    用枚举的方式固定一个变量,即枚举m1里装多少个v1,接下来贪心,m1剩余的空间尽量填v2,m2里先尽量装v1,如果有剩余空间再尽量装v2

    #include<bits/stdc++.h>
    
    using namespace std;
    
    inline int rd(){
    	int ret=0,f=1;char c;
    	while(c=getchar(),!isdigit(c))f=c=='-'?-1:1;
    	while(isdigit(c))ret=ret*10+c-'0',c=getchar();
    	return ret*f;
    }
    #define pc putchar
    #define space() pc(' ')
    #define nextline() pc('
    ')
    void pot(int x){if(!x)return;pot(x/10);pc('0'+x%10);}
    void out(int x){if(!x)pc('0');if(x<0)pc('-'),x=-x;pot(x);}
    
    int m1,m2,n1,n2,v1,v2;
    
    void solve(){
    	int ans=0;
    	m1=rd();m2=rd();
    	n1=rd();n2=rd();
    	v1=rd();v2=rd();
    	if(v1>v2) swap(n1,n2),swap(v1,v2);
    	for(int i=0;i<=n1;i++){//me w1
    		if(i*v1>m1) break; 
    		int j=min(n2,(m1-i*v1)/v2);//me w2
    		int k=min(n1-i,m2/v1);//fo w1
    		int l=min(n2,(m2-k*v1)/v2);//fo w2
    		ans=max(ans,min(n1,i+k)+min(n2,j+l));
    	}
    	out(ans);nextline();
    }
    
    int main(){
    	int T=rd();
    	while(T--) solve();
    	return 0;
    }
    
  • 相关阅读:
    收藏了!主流应用市场产品提交资料汇总!
    Oracle用户、权限、角色管理
    H3C SNMP配置解析
    从实战角度浅析snmp
    ICE checkbox 用法
    eclipse序列化生成serialVersionUID
    Bat命令学习
    app生成工具
    微软浏览器兼容工具modern.IE
    php判断手机客户端
  • 原文地址:https://www.cnblogs.com/ghostcai/p/13567894.html
Copyright © 2020-2023  润新知