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

打卡第三天 - P2946 - 2026 - 6 - 16

这是也是一道01背包的题目,只不过动规数组的定义有点出乎我的意料,因为最终的结果需要Mod F,所以我们定义动规数组\(f[i][j]\)是考虑前i个数的情况下组合出来的能力值对F取模的结果为j的方案数。
这样,我们就可以套01背包的模板了,就是递推部分需要改一改
当选到第i个的时候,我们有两种情况

  1. 不选这个牛,我们的方案就来自于\(f[i-1][j]\),原样递推过来
  2. 选这个牛,我们的方案数就来自于\(f[i-1][(j - (r_i \bmod F ) + F) \bmod F]\),为什么呢,因为我们需要找一个方案,原本的能力值加上当前的\(r_i\)然后对F取余得j,设原本的能力值为\(x\),则得$$(x + r_i) \bmod F = j$$根据$$a\bmod m=b⟺a=km+b (k∈Z,0≤b<m)$$可得$$x+r_i = kF + j$$整理得$$x=kF+(j-r_i)$$所以$$x \equiv (j-r_i) \pmod{F}$$意味着\(x\)\(j-r_i\)的差是\(F\)的倍数,因此$$x \bmod F = (j - r_i) \bmod F$$因为\(x\)的定义域为\(0\le x <F\),则$$x=(j-r_i)\bmod F$$因为不确定\(j\)\(r_i\)的大小关系,防止中间得到负数,我们加一个F,即$$x=(j-r_i+F)\bmod F$$但是,\(r_i\)的定义域为\(0\le r_i \le 10^5\)\(j\)的定义域却为\(0\le j < F\),就有可能出现\(r_i\)\(j\)大很多,导致我们加一个\(F\)可能还是负数,所以我们根据 $$(a+b) \bmod c = (a + (b \bmod c)) \bmod c$$可得$$x=(j-r_i+F)\bmod F \iff x=(j-(r_i \bmod F) + F) \bmod F $$故我们终于推导出了结果,但是解题还没有结束
    因为这两种情况都合法,所以我们在计算方案总数的时候要把两个都算上而不是用max
    所以完整的递推公式为$$f[i][j]=f[i-1][j] + f[i-1][(j - (r_i \bmod F) + F) \bmod F] \bmod 10^8$$
    记得对1e8求余,不然很容易爆int
    然后,我们就可以轻松愉快的写代码了
    注意,我们需要把\(f[0][0]\)赋值成1,因为考虑0只羊选0只,总能力对F求余依然是0,也算是F的倍数,所以也是一种方案
    但是在题目中要求必须选一只羊,所以我们必须在最后输出答案的时候把这个方案踢出去
    最后求出来以后对\(10^8\) 求余就好了(要考虑总方案数-1后可能为负,记得加上一个\(10^8\)再求余哦
    AC代码(空间压缩版):
#include <cstring>
#include <iostream>
using namespace std;
const int M = 1e3 + 1, MOD = 1e8;
int f[M], g[M] /* 这个数组用来辅助空间压缩 */;int main() {int n, F;cin >> n >> F;f[0] = 1;while (n--) {int r;cin >> r;memcpy(g, f, sizeof(int) * F);for (int j = F - 1; j >= 0; j--) {f[j] = (g[j] + g[(j - r + F) % F]) % MOD;}}cout << (f[0] - 1 + MOD) % MOD;return 0;
}
http://www.jsqmd.com/news/1026642/

相关文章:

  • Claude Code实战手册:从安装配置到AI驱动的工程化工作流
  • 2026年成都爱马仕名包回收机构甄选:本地正规靠谱服务推荐清单 - 优质品牌商家
  • 丽水房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水
  • 九江房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水
  • 嵌入式开发实战:基于Microchip平台深度解析FatFs文件系统API与移植指南
  • PXD20嵌入式系统性能优化:Flash行缓冲与GXG图形加速实战
  • OSEKturbo OS/ARM7系统服务实战:计数器、报警器与通信管理详解
  • 快速上手指南:RoboTwin双臂机器人数字孪生平台完全解析
  • 2026知名的大新办理公司注册业务企业排名哪家靠谱 - 品牌排行榜
  • HMCL内存优化终极指南:让低配电脑流畅运行高版本Minecraft的完整解决方案
  • FinalBurn Neo深度技术解析:从模拟器内核到高性能游戏引擎的架构演进
  • 工业货梯维修保养厂家甄选指南:2026年珠三角及西南市场实力企业纵览 - 优质品牌商家
  • 深入解析NXP LA9310 VSPA架构IPPU寄存器:异构多核协同与实时控制
  • 守护无形财富:商业秘密翻译的专业世界
  • 三大核心理念:MAA明日方舟自动化助手的智能游戏管理革命
  • 2026年铁路信号线PTYAH23行业应用与供应商甄选参考 - 优质品牌商家
  • SEO代理解析:成功搜索引擎抓取你需要了解的事项
  • 2026年新消息发布:太仓GEO热门服务商烽林科技获业内高度推荐 - 品牌鉴赏官2026
  • 如何在5分钟内为Unity游戏添加插件支持:新手完整指南
  • 2026年成都灭蚊蝇品牌电话官方甄选:本地服务与专业技术深度评测 - 优质品牌商家
  • DeepSeek为何成美国企业中文AI首选?技术代差与采购范式变革
  • 嵌入式虚拟化实战:Freescale Hypervisor设备树配置与GDB调试详解
  • Resemble Enhance终极指南:5分钟掌握AI语音降噪增强技术
  • GeoJSON.io终极指南:三步掌握免费在线地理数据编辑工具
  • Windows文件同步终极解决方案:SyncTrayzor完全指南
  • 2026年新发布石家庄日语培训班价格表推荐与选择策略 - 品牌鉴赏官2026
  • 单科英语很差,会影响大学大数据专业学习吗
  • 2026年当天入职劳务派遣服务商甄选指南:正规、包吃住、不压工资的靠谱选择 - 优质品牌商家
  • 2026李沧区专业的浴池疏通公司推荐排行 - 品牌排行榜
  • 嵌入式Linux安全漏洞精准管理:Vigiles工具实战解析