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

【Luogu】P4127 [AHOI2009] 同类分布 (数位DP)

P4127 [AHOI2009] 同类分布 - 洛谷

题目:

思路:

数位DP板子

一看到统计符合某个特征的数字,那么显然可以想到数位DP

那么板子走起,首先当前位 now 和 lim 肯定有,本题没有前导零的限制,所以可以不需要

那么就分析题目条件来知道还要加什么参数,既然要满足所有 数字 能被 数位和 整除,那么显然就需要数位和 sum 这个参数,那么如何处理 数字 能被 数位和整除这个条件呢?如果其当作一个参数,那么记忆化时显然会爆内存,所以考虑优化

发现 18*9=162,数位和的可能很小,所以我们可以考虑提前枚举我们最后的数位和 givesum,那么计算过程中我们只需要传当前的余数 mod 了,这样一来就能快速优化了

PS:下面的代码不应该偷懒使用字符串的,多测时会计算错误,因为我们的最高位是 0,多测记忆化时显然会读取错误,本题不知道为什么能过,应该改成数组比较好的

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define Sunny 0
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());int dp[20][205][205];
int A,B, m, givesum;
string a;int dfs(int now, int lim, int sum, int mod)
{if (now == m)return sum == givesum && !mod;if (dp[now][sum][mod] != -1 && !lim)return dp[now][sum][mod];int mx = lim ? a[now] - '0' : 9;int res = 0;for (int i = 0; i <= mx; i++){if (i + sum > givesum)break;res += dfs(now + 1, lim && i == mx, sum + i, (mod * 10 + i) % givesum);}if (!lim)dp[now][sum][mod] = res;return res;
}int getans(int x)
{a = to_string(x);m = a.size();int ans = 0;for (int i = 1; i <= 9 * m; i++){memset(dp, -1, sizeof dp);givesum = i;ans += dfs(0, 1, 0, 0);}return ans;
}void solve()
{cin >> A >> B;cout << getans(B) - getans(A-1) << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while(t--){solve();}return Sunny;
}

http://www.dtcms.com/a/349183.html

相关文章:

  • 【知识杂记】卡尔曼滤波相关知识高频问答
  • Java 中 Set 接口(更新版)
  • 深度学习中的“集体智慧”:Dropout技术详解——不仅是防止过拟合,更是模型集成的革命
  • Java静态代理与动态代理实战解析
  • redis集群模式 -批量操作
  • 智慧工业设备巡检误报率↓81%!陌讯多模态融合算法实战优化与边缘部署
  • 【机器学习】6 Frequentist statistics
  • (计算机网络)JWT三部分及 Signature 作用
  • 车企数据资产管理——解读46页大型车企数据资产数据治理体系解决方案【附全文阅读】
  • 计算机系统 C语言运行时对应内存映射 以及 各个段的数据访问下标越界产生的后果
  • Delphi 12 基于 Indy 的 WebServer 的 https 实现的问题
  • HiRAG:用分层知识图解决复杂推理问题
  • ruoyi框架角色分配用户
  • imx6ull-驱动开发篇38——Linux INPUT 子系统
  • leetcode_189 轮转数组
  • 什么嵌入式接入大模型:第二篇基于 STM32 ESP32 的社会服务助手
  • AI重塑跨境电商:选品成功率提升53%+物流效率加快34%,多语种运营成破局关键
  • String的intern方法
  • 数据库服务优化设置
  • nano命令使用方法
  • 备考NCRE三级信息安全技术 --- L1 信息安全保障概述
  • 自编 C# 颜色命名和色彩显示,使用 DataGridView 展示颜色命名、RGB值
  • 推进数据成熟度旅程的 3 个步骤
  • 基于 MATLAB 的信号处理实战:滤波、傅里叶变换与频谱分析
  • 什么是IP代理
  • 智慧农业病虫害监测误报率↓82%!陌讯多模态融合算法实战解析
  • 基于微信小程序校园微店源码
  • 电力电子simulink练习10:反激Flyback电路搭建
  • [leetcode] - 不定长滑动窗口
  • 深度学习卷积神经网络项目实战