hdu 3652 B-number(数字dp)

hdu 3652 B-number(数字dp)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

http://acm.hdu.edu.cn/showproblem.php?

pid=3652

大致题意:”B-number“即一个整数含有子串”13″且被13整除。求1-n之间这种数的个数。


思路:有两个限制条件:含有子串“13”和能被13整除。

那么设dp[site][mod][flag]。表示到第site位对13取余为mod且标记为flag的数的个数。flag表示是否含有子串”13″。

然后进行记忆话搜索。


#include <stdio.h>
#include <iostream>
#include <map>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
#define LL long long
#define _LL __int64
#define eps 1e-8
#define PI acos(-1.0)
using namespace std;

int dp[15][15][5];
int dig[15];
//flag = 0表示前一个不是1,flag = 1表示前一个是1。flag = 2表示出现"13"。

int dfs(int site, int mod, int flag, int up){ if(site == 0) return mod == 0 && flag == 2; //当mod为0且有"13"时。返回1 if(!up && dp[site][mod][flag] != -1)//记忆化 return dp[site][mod][flag]; int len = up ?

dig[site] : 9; int ans = 0; for(int i = 0; i <= len; i++) { int tmod = (mod*10 + i) % 13; int tflag = flag; if(flag == 1 && i == 3) tflag = 2; else if(flag == 0 && i == 1) tflag = 1; else if(flag == 1 && i != 1) tflag = 0; ans += dfs(site-1, tmod, tflag, up && (i == len) ); } if(!up) dp[site][mod][flag] = ans; return ans;}int cal(int n){ int cnt = 0; while(n) { dig[++cnt] = n % 10; n /= 10; } memset(dp,-1,sizeof(dp)); return dfs(cnt,0,0,1);}int main(){ int n; while(~scanf("%d",&n)) { printf("%d\n",cal(n)); } return 0;}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117499.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何用两个栈实现一个队列

    如何用两个栈实现一个队列如何实现使用两个栈实现一个队列呢 这里主要还是自己的思想问题 在这里我们首先整理一下自己的思维 1 首先准备两个栈 栈 A 与栈 B2 栈 A 专门用来完成入队列操作 栈 B 专门用来出队列与取队首元素操作 3 每次入队列操作时 首先得判断 B 栈是否为空 不空则将 B 栈元素全都依次入 A 栈 最后继续入新元素 即将要入栈元素添加到栈 A 4 每次出队列与取队首元素操作时 将 A 栈中的元素依次入 B 栈 出队列即取出 B 栈中的元素 取队首元素即取 B 栈栈顶元素即可 importjava util Stack public

    2025年10月15日
    3
  • 阿里云疯狂促销 公有云之战刚鸣枪

    阿里云疯狂促销 公有云之战刚鸣枪

    2021年9月3日
    66
  • iOS的QuickTime Plugin

    当UIWebView播放视频时,可以看到viewhierarchy里有FigPluginView的身影。这个类来自于QuickTimePlugin,plugin的路径为:/Application

    2021年12月24日
    45
  • 初学者python详细安装步骤_编程工具

    初学者python详细安装步骤_编程工具前言:随着人工智能的快速发展,python语言越来越受大家的欢迎,目前Python官网已经更新到了最新版Python3.7.2,这里详细介绍python安装,希望会对大家有所帮助,欢迎留言提问。

    2022年7月6日
    25
  • 1+X 云计算平台运维与开发认证(初级)样卷A——附答案

    传送门教育部:职业教育将启动“1+X”证书制度改革职业教育改革1+X证书制度试点启动1+X成绩/证书查询入口文章目录一、单选题(每题10分,共200分)二、多选题(每题15分,共300分)三、实操题(共500分)网络管理(70分)yum源管理(60分)数据库管理(70分)Linux存储LVM管理(60分)OpenStack管理(80分)Docker管理(80分)WordPress应用系…

    2022年4月8日
    50
  • Python中break和continue的区别

    Python中break和continue的区别大部分人总是会搞混break和continue,虽然他们都是结束循环,但是结束的方式并不一样。break用于结束整个循环。continue用于结束当前循环。**1.**break有时候我们写代码时想让它结束整个循环,除了条件达到False结束,我们可以设定一个条件,当他达到这个条件时,结束整个循环。break用于完全跳出循环,执行循环体后面的语句。whileTrue:s=i…

    2022年5月26日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号