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

网站备案 论坛甘肃微信网站建设

网站备案 论坛,甘肃微信网站建设,做淘宝店铺装修的公司网站,微信公众号自定义菜单wordpress算法概述 什么是数位DP: 数位DP往往都是这样的题型,给定一个闭区间[L,R]让你求这个区间中满足某种条件的数的总数。所谓数位dp,就是对数位进行dp,也就是个位、十位等 时间复杂度:O(logN) 常用流程: 例题1&…

算法概述

什么是数位DP:

数位DP往往都是这样的题型,给定一个闭区间[L,R]让你求这个区间中满足某种条件的数的总数。所谓数位dp,就是对数位进行dp,也就是个位、十位等

时间复杂度:O(logN)        

常用流程:

例题1:windy数

link:P2657 [SCOI2009] windy 数 - 洛谷

推荐题解(特别详细,强烈推荐):题解 P2657 【[SCOI2009]windy数】 - 洛谷专栏

code

#include "bits/stdc++.h"
using namespace std;
using ll = long long;
ll dp[15][10];//dp[i][j]:长度为i的最高位为j的所有数字对应的windy数数目
// 当j==0: dp[i][0] == dp[i-1][2] + dp[i-1][3] + ... + dp[i-1][9];ll work(ll n)// return [0, n)中的windy数,注意不包括n
{int a[15] = { 0 };int len = 0;while (n){a[++len] = n % 10;n /= 10;}ll ans = 0;// 若 n = 54321// 计算windy(0~9999), 不能直接ans+=dp[len][0],因为题目要求不算前导0,dp[len][0]中不包含dp[len - 1][1]与dp[len-1][0]for (int i = 1; i <= len - 1; i++)for (int j = 1; j <= 9; j++)ans += dp[i][j];// windy(10000~49999)for (int i = 1; i <= a[len] - 1; i++) ans += dp[len][i];// windy(50000~54321)for (int i = len - 1; i >= 1; i--){for (int j = 0; j < a[i]; j++)// 因不包含最后a[i],work(n)求的是windy([0, n)),左闭右开,即不包括n{if (abs(j - a[i + 1]) >= 2) ans += dp[i][j];}if (abs(a[i] - a[i + 1]) < 2) break;}return ans;
}void init()
{for (int i = 0; i <= 9; i++)dp[1][i] = 1;for (int len = 2; len <= 11; len++){for (int i = 0; i <= 9; i++){for (int k = 0; k <= 9; k++){if(abs(i-k) >= 2) dp[len][i] += dp[len - 1][k];}}}
}int main()
{ll a, b; cin >> a >> b;init();ll ans = work(b + 1) - work(a);// 只考虑上界cout << ans << endl;return 0;
}

例2:7的意志

link:7的意志

code

#include "bits/stdc++.h"
using namespace std;
using ll = long long;
int dig[20];
ll dp[20][10][10];// dp[len][sum%7][sum1%7]:所有的长度为len的...ll dfs(int pos, int sum, int sum1, int limit)// return 前pos数对应的7的意志数,如n=54321, pos = 2,则dfs return[0, 54]中7的意志数
{if (pos == 0) return sum1 == 0 && sum == 0;if (!limit && dp[pos][sum][sum1] != -1) return dp[pos][sum][sum1];// limit为false才可使用通用dpll res = 0;ll up = limit ? dig[pos] : 9;for (int i = 0; i <= up; i++){res += dfs(pos - 1, (sum * 10 + i) % 7, (sum1 + i) % 7, limit && (i == dig[pos]));}if(!limit)dp[pos][sum][sum1] = res;// (!limit意味着up为9,此时的dp[pos]具有通用性return res;
}ll work(ll n)// 计算[0, n]7的意志的个数
{ll len = 0;while (n){dig[++len] = n % 10;n /= 10;}memset(dp, -1, sizeof dp);return dfs(len, 0, 0, 1);
}int main()
{ll n, m; while (true){cin >> n >> m; if (n == 0 && m == 0)return 0;ll ans = work(m) - work(n - 1);cout << ans << endl;}
}

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

相关文章:

  • 数模之路获奖总结——数据分析交流(R语言)
  • 网站 后台 数据 下载网站优化软件推荐
  • Java数据结构第二十七期:布隆过滤器,用 “模糊” 换高效的查重黑科技
  • 怎么做质量高的网站如何实现网站建设服务
  • 我的项目开发的一般流程,供交流
  • 做网站实名认证有什么用濮阳市城乡一体化示范区主任
  • InnoDB压缩技术:节省空间提升性能
  • 国任保险携手云轴科技ZStack获评鼎新杯数字化转型应用典型案例
  • 进入网站wordpress配置如何在百度搜到自己的网站
  • 建设银行网站怎么看不见余额专业类网站
  • qq登录网站授权怎么做外贸自建站平台哪个好
  • 红豆杉发展前景与培育技术(英文翻译稿)
  • 虾皮后端一面
  • 网站的新闻模块怎么做公司网络推广营销
  • 自己做刷东西的网站百度地图电脑版网页
  • 【开题答辩全过程】以 spb+疾病风险预警平台的设计与实现为例,包含答辩的问题和答案
  • 北京做百度网站有免费建网站
  • 国外的电商网站这么攻击网站
  • 新手卖家做来赞达网站如何如何用wordpress站群
  • string(1),咕咕咕
  • 网络安全基础--第六课:MySQL基础
  • 技术博客SEO优化终极指南
  • 怎么做淘宝联盟网站推广百度域名怎么注册
  • ftp 网站酒店网站策划书
  • 深度学习之图像分类笔记
  • ping 概念及题目
  • PyTorch 模型评估与全局平均池化的应用实践
  • 什么是大型门户网站软件开发公司app
  • 构建AI智能体:四十六、Codebuddy MCP 实践:用高德地图搭建旅游攻略系统
  • Sychronized和ReentrantLock的区别