打卡信奥刷题(2949)用C++实现信奥题 P5878 奖品
P5878 奖品题目描述学校刚开完运动会准备为尽可能多的同学评奖并为每个人颁发一份奖品。一份奖品包括NNN个物品如555支铅笔、101010本练习薄等。每份奖品完全一样。虽然学校的保管室里还有一些办去年运动会后剩余的物品。在商店里每种物品都有很多但是只有两种包装大盒或小盒并且不拆开买。现在的问题是充分利用这MMM元钱最多可准备多少分这样的奖品输入格式第一行两个整数N,MN,MN,M。下面有NNN行每行有六个正整数x,y,sm,pm,sv,pvx,y,sm,pm,sv,pvx,y,sm,pm,sv,pv分别表示一种物品的相关数据xxx一份奖品中这种物品需要的件数。yyy这种物品去年剩余的件数。smsmsm这种物品小包装的件数。pmpmpm这种物品小包装的一盒价格。svsvsv这种物品大包装里的件数。pvpvpv这种物品大包装的一盒价格。输出格式一个整数最多可准备的礼品份数。输入输出样例 #1输入 #12 100 10 8 10 10 13 11 12 20 6 10 17 24输出 #15输入输出样例 #2输入 #23 65 10 5 7 10 13 14 10 5 8 11 14 15 10 5 9 12 15 16输出 #22说明/提示对于全部的数据满足1≤N≤1001 \le N \le 1001≤N≤1001≤M≤1051 \le M \le 10^51≤M≤105。10≤x,pm≤10010 \le x, pm \le 10010≤x,pm≤1001≤y,sm≤1001 \le y, sm \le 1001≤y,sm≤100smsv≤100sm sv \le 100smsv≤100pmpv≤100pmpv\le 100pmpv≤100。C实现#includebits/stdc.husingnamespacestd;#defineintlonglongintn,m,a[101][6],f[100001],l,r;boolcheck(intmid){intans0;for(inti1;in;i){memset(f,0,sizeof(f));booltmp0;for(intj0;jm;j){if(ja[i][3])f[j]max(f[j],f[j-a[i][3]]a[i][2]);if(ja[i][5])f[j]max(f[j],f[j-a[i][5]]a[i][4]);if(f[j]a[i][0]*mid-a[i][1]){ansj,tmp1;break;}}if(!tmp)return0;}returnansm;}signedmain(){cinnm;for(inti1;in;i)cina[i][0]a[i][1]a[i][2]a[i][3]a[i][4]a[i][5];l0,rm;while(lr){intmid(lr1)/2;if(check(mid))lmid;elsermid-1;}coutl;return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412631.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!