LightOJ 1068 - Investigation (数位dp)
来源:互联网 发布:必修三数学算法初步 编辑:程序博客网 时间:2024/06/11 00:55
题意:
[l,r]区间,l,r∈[1,231)中本身能被k<104整除,且数位和也能被k整除的数的数目
分析:
乍一看以为空间炸了不可做,dp[i][k][k],但是发现−−数位和顶多就90不到,所以算的时候特判下就好了
dp[i][mod][sumdMod]:从高到低第i位,模k余数是mod,数位和模k余数是sumdMod的满足要求的数字数
dp[11][90][90]很随意就过了
代码:
//// Created by TaoSama on 2015-11-22// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;int k, digit[15], dp[11][90][90];int dfs(int i, int m, int sm, int e) { if(!i) return !m && !sm; if(!e && ~dp[i][m][sm]) return dp[i][m][sm]; int to = e ? digit[i] : 9; int ret = 0; for(int d = 0; d <= to; ++d) ret += dfs(i - 1, (m * 10 + d) % k, (sm + d) % k, e && d == to); return e ? ret : dp[i][m][sm] = ret;}int calc(int x) { int cnt = 0; for(; x; x /= 10) digit[++cnt] = x % 10; if(k > cnt * 9) return 1; //only 0 can return dfs(cnt, 0, 0, 1);}int main() {#ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); int kase = 0; int t; scanf("%d", &t); while(t--) { int l, r; scanf("%d%d%d", &l, &r, &k); memset(dp, -1, sizeof dp); printf("Case %d: %d\n", ++kase, calc(r) - calc(l - 1)); } return 0;}
0 0
- lightoj - 1068 Investigation (数位dp)
- LightOJ 1068 - Investigation (数位dp)
- lightoj 1068 Investigation 数位dp
- LightOJ 1068 Investigation (数位dp)
- lightoj 1068 - Investigation (数位DP)
- LightOJ - 1068 Investigation(数位DP)
- LightOJ 1068 - Investigation(数位DP)
- lightoj 1068 - Investigation 数位DP
- lightOJ 1068 - Investigation (数位dp)
- LightOJ 1068 Investigation (数位DP)
- Investigation (数位dp)
- Light oj 1068 - Investigation(数位dp)
- 【1】【状压DP】LightOJ 1068 Investigation
- Light OJ 1068 Investigation (数位DP)
- Lightoj1068——Investigation(数位dp)
- lightoj 1068 数位DP
- LightOJ 1068数位dp
- Lightoj 1068 数位dp
- LintCode-剑指Offer-(105)复制带随机指针的链表
- 这算是断点续传的雏形么?
- 今天记起来的一些基础
- C#(链栈)实现火车重排问题
- 【黑马程序员】反射
- LightOJ 1068 - Investigation (数位dp)
- struts2 国际化
- Lua 入门学习教程(二) 函数 与 回调函数
- AIX 下lsnrctl start 错误
- 【C#】delegate委托的定义和使用方法
- 计算机操作系统之内存管理
- 郁闷啊,三点多钟还没睡,休息一下,看下摸胸小苹果。
- [Android]百度地图初使用(3)
- Red-Black Tree