当前位置: 首页 > news >正文

ZR #3559. 大家仍会记得我吗

题目描述

link
\(n\) 种牌,第 \(i\) 种有数量 \(c_i\),每张消耗辉星 \(p_i\)、能量 \(v_i\),基础伤害 \(s_i\),且每打出 \(l_i\) 张额外造成 \(b_i\) 点伤害(累积触发)。你有 \(m\) 辉星、\(k\) 能量,求最大总伤害。
\(T \le 3,\ n \le 200,\ m,k \le 300,\ p_i,v_i,s_i,c_i,b_i \le 10^6,\ l_i \le 10^6\)(可为 \(0\)),所有输入非负。

解题思路

这是一个多重背包问题,但是对于 \(l_i\) 张的额外伤害有点难以处理,于是我们考虑将每 \(l_i\) 张是做一个整块,对这些块进行二进制分组。在对剩下 \(l_i-1\) 进行另外的二进制分组,这样就可以表示出每种选择方案了。

但是这样做有个问题,假设整块个数 \(cnt\),很有可能你取满了 \(cnt\) 个整块,但是剩下还剩 \(r=n \% l_i\),你没法取到 \(l_i-1\),所以要分开考虑,先对 \(cnt-1\) 个整块进行上述操作,在对剩下的进行二进制分组处理,具体来说,剩下的数 \(0\sim r\),此时前面的 \(cnt*l_i\) 个数我们必须取,我们需要先将 dp 数组先提前算上前面的数的影响。

具体实现参考代码。

还有单调队列的做法,有空可以想想。

code

#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define out() (cout << "sb\n")const int N=205*40,M=305;int ccc,T,n,m,K;
ll f[M][M],g[M][M];
struct nd{ll p,v,s,c,l,b;int id;
}a[N],temp[N],b[N];signed main(){// system("fc .out .out");// freopen("ex_remember5.in","r",stdin);// freopen("remember.out","w",stdout);IOScin>>ccc>>T;while(T--){memset(f,0,sizeof(f));memset(g,0,sizeof(g));cin>>n>>m>>K;for(int i=1;i<=n;i++) {int p,v,s,c,l,b;cin>>p>>v>>s>>c>>l>>b;a[i]={p,v,s,c,l,b,i};}for(int i=1;i<=n;i++){ //枚举第 $i$ 个数int ta=0,tb=0;int l=a[i].l;int t=a[i].c/l;nd x;if(t==0){x=a[i];int sum=0,tot=0;for(int j=1;sum+j<=x.c;j<<=1){sum+=j;b[++tot]=x;b[tot].s*=j, b[tot].p*=j, b[tot].v*=j;}int temp=x.c-sum;if(temp) {b[++tot]=x;b[tot].s*=temp, b[tot].p*=temp, b[tot].v*=temp;}for(int id=1;id<=tot;id++){x=b[id];for(int j=m;j>=x.p;j--)for(int k=K;k>=x.v;k--)f[j][k]=g[j][k]=max(f[j][k],f[j-x.p][k-x.v]+x.s);}continue;}int tt=0;temp[++tt]={a[i].p*l, a[i].v*l, a[i].s*l+a[i].b, t-1,0,0,i};temp[++tt]=a[i], temp[tt].c=l-1;int tot=0;for(int _=1;_<=tt;_++){x=temp[_];int sum=0;for(int j=1;sum+j<=x.c;j<<=1){sum+=j;b[++tot]=x;b[tot].s*=j, b[tot].p*=j, b[tot].v*=j;}int temp=x.c-sum;if(!temp) continue;b[++tot]=x;b[tot].s*=temp, b[tot].p*=temp, b[tot].v*=temp;}for(int id=1;id<=tot;id++){x=b[id];for(int j=m;j>=x.p;j--)for(int k=K;k>=x.v;k--)f[j][k]=max(f[j][k],f[j-x.p][k-x.v]+x.s);}x=a[i];x.c=a[i].c%l;tot=0;int num=t*l;ll pp=num*x.p,vv=num*x.v,ss=t*x.b+num*x.s;int sum=0;b[++tot]={0};for(int j=1;sum+j<=x.c;j<<=1){sum+=j;b[++tot]=x;b[tot].s*=j, b[tot].p*=j, b[tot].v*=j;}int temp=x.c-sum;if(temp){b[++tot]=x;b[tot].s*=temp, b[tot].p*=temp, b[tot].v*=temp;}for(int j=m;j>=pp;j--)for(int k=K;k>=vv;k--)g[j][k]=g[j-pp][k-vv]+ss;for(int id=1;id<=tot;id++){x=b[id];for(int j=m;j>=pp+x.p;j--)for(int k=K;k>=vv+x.v;k--)g[j][k]=max(g[j][k],g[j-x.p][k-x.v]+x.s);}for(int j=0;j<=m;j++)for(int k=0;k<=K;k++)f[j][k]=g[j][k]=max(f[j][k],g[j][k]); //背包合并}cout<<f[m][K]<<"\n";}return 0;
}

总结

这道题赛时想到了,但是没有敲出来,并且后来调试了非常久。并且是一道背包变种,以后可以回来练练码力。

http://www.jsqmd.com/news/1362688/

相关文章:

  • GitHub认证迁移指南:从HTTPS到SSH的完整方案
  • 抖音无水印下载终极指南:三步解锁专业级批量下载方案
  • Linux 内核驱动开发与 BSP 移植经验:升级前先做这几项确认
  • 2026年工业过滤领域制造企业竞争格局与选型策略观察 - 优企名品
  • 抖店无货源模式合规运营要点 新店规避违规扣分核心红线梳理 - 抖大侠
  • 2026年全国实木生态全屋定制家具推荐**名单 - 起跑123
  • 新城区找性价比高的灯箱制作服务团队 玉泉区锦诚广告店(个体工商户)(新城区联络处) - 热点品牌推荐
  • 2026年7月GEO与SEO优化公司**盘点:380亿市场的服务商选型攻略与避坑指南+FAQ问答 - 互联网科技品牌测评
  • 装闭 RenoPit 源码解析(03):AI装修项目的创建、复制与删除流程
  • Git推送失败原因分析与解决方案
  • 2026 年勐腊评价高的电机回收企业电话,旧机器里藏着的宝贝,居然能换好几千块?-再塑变压器回收 - 行业推荐官[官方】--
  • 2026年在新疆找旅游包车旅行社,我的真实体验分享 - 起跑123
  • Three.js 3D 渲染与赛博朋克风格 UI 实现:选型别只看功能清单
  • 2026盘点贵阳老旧二手房翻新平台选购实用指南 - 装修教育财税推荐2026
  • 2026 年 8 月新发布:眉山靠谱的拼装式不锈钢水箱销售厂家哪家靠谱,老楼顶冒水?这种金属大家伙竟比传统水箱省一半钱!-潇湘凌云供水设备 - 行业推荐官【认证】
  • 2026年8月全网首测:八大维度筛选正规SEO+GEO机构**,害怕踩坑就选这几家GEO公司 - 互联网科技品牌测评
  • 2026 年 8 月新发布:宿城热门的年会策划服务商哪个好,年会上省5万的老板,都偷偷用这招做这事? - 行业推荐官【认证】
  • 2026南昌赣菜经典商务宴请热门门店地址**参考 - 起跑123
  • 2026 年新消息:丽水口碑好的腐蚀品物流运输公司哪家靠谱,你以为“它”只要密封好就行?这行的隐形坑你一个都别踩。 - 行业推荐官[官方】--
  • 图灵奖数字存档系统:基于时间戳与区块链的学术认证方案
  • 2026年小型液压系统优质厂家推荐 帕尼科液压实测 - 起跑123
  • IntelliJ IDEA 2026包层级展示恢复与优化指南
  • 2026下半年京津冀AI获客实力企业如何选择 - 装修教育财税推荐2026
  • 2026 年阿克苏地有实力的玻璃棉管供货商哪个好,把家里的旧管道换这玩意儿,居然比原来省了一半电费? - 企业信息推荐-2
  • 2026 年至今,南汇值得关注的木工机械设备底座企业哪家靠谱,用对这玩意儿,木工设备的稳定性直接拉满,省了大半返工费。-鸿超精密机械 - 企业推荐官【认证】
  • 2026 年现阶段,鱼峰值得关注的平面铸铁闸门平台深度解析与优选指南,防洪防汛关键时刻,这玩意儿比你家防盗门靠谱10倍(反常识颠覆) - 领域鉴赏官
  • 抖店一件代发订单处理全流程:新店从下单到发货售后完整操作指南 - 抖大侠
  • 2026 年现阶段张湾靠谱的公路边坡防护网企业哪家**,去年还得花几万修边坡,今年用它省了大半钱,你猜是啥妙招? - 行业推荐官[官方】--
  • 2026年8月AI搜索优化GEO公司怎么选不踩雷?过来看看你的行业如何通过geo提升品牌曝光 - 互联网科技品牌测评
  • 2026 年新消息:鹤山可靠的青石棺材直销厂家哪家靠谱,古村后山的百年石棺里,藏着它不该被现世的秘密 - 领域鉴赏官