Codeforces Gym100623J:Just Too Lucky(数位DP)
http://codeforces.com/gym/100623/attachments
题意:问1到n里面有多少个数满足:本身被其各个数位加起来的和整除。例如120 % 3 == 0,111 % 3 == 0,都算。
思路:老是写不出数位DP。。。
因为n最大为12位,所以取模的数最大可以是9*12 == 108,因此枚举这个模。
dfs记录的状态有:pos, sum, mod, remain, flag。
pos代表枚举到第几位,
sum代表数位之和,
mod代表当前枚举的模,
remain代表当前枚举的数,(做不出来主要昨天这里没考虑好,12 % 3和120 % 3是一样的结果)
flag代表前面是否达到上限。
然后最后判定的时候只要remain == 0 && mod == sum就是可行的状态。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define N 15
#define M 110
int dp[N][M][M][M], bit[N]; LL dfs(int pos, int sum, int mod, int remain, int flag) {
if(!pos) return sum == mod && remain == ;
if(~dp[pos][sum][remain][mod] && flag) return dp[pos][sum][remain][mod];
int d = flag ? : bit[pos];
LL ans = ;
for(int i = ; i <= d; i++)
ans += dfs(pos - , sum + i, mod, (remain * + i) % mod, flag || i != d);
if(flag) dp[pos][sum][remain][mod] = ans;
return ans;
} LL solve(LL n) {
int len = ;
while(n) { bit[++len] = n % ; n /= ; }
LL ans = ;
for(int i = ; i <= ; i++)
ans += dfs(len, , i, , );
return ans;
} int main() {
freopen("just.in", "r", stdin);
freopen("just.out", "w", stdout);
memset(dp, -, sizeof(dp));
LL n; cin >> n;
cout << solve(n) << endl;
return ;
}
Codeforces Gym100623J:Just Too Lucky(数位DP)的更多相关文章
- CodeForces 55D "Beautiful numbers"(数位DP+离散化处理)
传送门 参考资料: [1]:CodeForces 55D Beautiful numbers(数位dp&&离散化) 我的理解: 起初,我先定义一个三维数组 dp[ i ][ j ][ ...
- CodeForces 55D Beautiful numbers(数位dp+数学)
题目链接:http://codeforces.com/problemset/problem/55/D 题意:一个美丽数就是可以被它的每一位的数字整除的数. 给定一个区间,求美丽数的个数. 显然这是一道 ...
- Codeforces 55D. Beautiful numbers(数位DP,离散化)
Codeforces 55D. Beautiful numbers 题意 求[L,R]区间内有多少个数满足:该数能被其每一位数字都整除(如12,24,15等). 思路 一开始以为是数位DP的水题,觉得 ...
- Codeforces 1290F - Making Shapes(数位 dp)
Codeforces 题面传送门 & 洛谷题面传送门 数位 dp 好题. 首先,由于是凸包,一但向量集合确定,凸包的形态肯定就已经确定了.考虑什么样的向量集合能够组成符合条件的凸包,我们假设第 ...
- CodeForces 55D Beautiful numbers(数位dp)
数位dp,三个状态,dp[i][j][k],i状态表示位数,j状态表示各个位上数的最小公倍数,k状态表示余数 其中j共有48种状态,最大的是2520,所以状态k最多有2520个状态. #include ...
- CodeForces 628 D Magic Numbers 数位DP
Magic Numbers 题意: 题意比较难读:首先对于一个串来说, 如果他是d-串, 那么他的第偶数个字符都是是d,第奇数个字符都不是d. 然后求[L, R]里面的多少个数是d-串,且是m的倍数. ...
- codeforces 401D. Roman and Numbers 数位dp
题目链接 给出一个<1e18的数, 求将他的各个位的数字交换后, 能整除m的数的个数. 用状态压缩记录哪个位置的数字已经被使用了, 具体看代码. #include<bits/stdc++. ...
- CodeForces - 55D Beautiful numbers(数位DP+Hash)题解
题意:美丽数定义:一个正数能被所有位数整除.求给出一个范围,回答这个范围内的美丽数. 思路:一个数能被所有位数整除,换句话说就是一个数能整除所有位数的LCM,所以问题就转化为一个数能否被所有位数的LC ...
- Gym - 100623J Just Too Lucky (数位dp)
给定n∈[1,1e12],求1到n的所有整数中,各位数字之和能整除它本身的数的个数. 这道题与UVA-11361类似,假如设dp[u][lim][m1][m2]为枚举到第u位(从低到高数),是否受限, ...
随机推荐
- ThreadPoolExecutor原理和使用
大家先从ThreadPoolExecutor的整体流程入手: 针对ThreadPoolExecutor代码.我们来看下execute方法: public void execute(Runnable c ...
- 【代码备忘录】VC设置您的计算机环境变量、注册表操作
欢迎增加C/C++ QQ组,无论你的工作.学生,只有具备c / vc / c++ 编程经验.就来吧!158427611 [设置电脑环境变量] 设置电脑环境变量非常easy,由于window而言.环境变 ...
- 【转载】FusionSphere架构详解
FusionSphere底层使用Xen架构: 1.单台物理机上建立hypervisor系统. 2.将所有单个hypervisor系统整合起来管理使用. 安装CNA节点,所有的物理服务器都会先成为CNA ...
- MultiBinding
<StackPanel> <Slider x:Name="sl1" Minimum="10" Maximum="100"/ ...
- WPF Path.Data 后台代码赋值
Path path = new Path(); string sData = "M 250,40 L200,20 L200,60 Z"; var converter = TypeD ...
- 解决Android Studio运行时报Error:java.lang.NullPointerException (no error message)错误
原文:解决Android Studio运行时报Error:java.lang.NullPointerException (no error message)错误 ...
- BGP路由的手动汇总
网络拓扑 XRV1 ========================================================== !hostname XRV1!interface Loopba ...
- 从零开始学习音视频编程技术(三) 开发环境搭建(Qt4.86手动设置环境,主要就是设置g++和qmake,比较透彻,附下载链接)
1.先下载安装Qt 我们使用的版本是4.8. 可以自行百度下载也可以从下面的网盘地址下载: Qt库和编译器下载: 链接:http://pan.baidu.com/s/1hrUxLIG 密码:0181 ...
- NET C#创建WINDOWS系统用户
原文:NET C#创建WINDOWS系统用户 /前提是当前用户有相应的权限 /WinNT用户管理 using System; using System.DirectoryServices; na ...
- Android零基础入门第65节:RecyclerView分割线开发技巧
在上一期通过简单学习,已经领略到了RecyclerView的灵活性,当然都是一些最基础的用法,那么本期一起来学习RecyclerView的分割线使用. 相信有的比较细心的同学已经发现了,使用Recyc ...