【DP 好题】hihoCoder #1520 古老数字
这道题的要点是状态转移的顺序。
要从低位向高位进行状态转移。
Implementation
string s;
cin >> s;
reverse(all(s));
int x, y;
scan(x, y);
int n = (int) s.size();
vector<vector<short>> dp(n, vector<short>(x, -1));
vector<int> ten(n);
ten[0] = 1 % x;
for (int i = 1; i < n; i++) {
ten[i] = ten[i - 1] * 10 % x;
}
// println(ten);
auto update = [](short &x, short y) {
if (x == -1) x = y;
};
if (s[0] != '?') {
dp[0][(s[0] - '0') * ten[0] % x] = s[0] - '0';
} else {
if (n == 1) {
update(dp[0][0], 0);
}
for (short i = 1; i < 10; i++) {
int r = i % x;
update(dp[0][r], i);
}
}
rng (i, 0, n - 1) {
short l, r;
if (s[i + 1] != '?') {
l = r = s[i + 1] - '0';
}
else {
l = i == n - 2 ? 1 : 0;
r = 9;
}
for (short d = l; d <= r; ++d) { // 先从小到大枚举第 i + 1 位上的数字
rng (j, 0, x) { // 再枚举 0 到 i 这些位上贡献的余数
if (dp[i][j] != -1) {
int R = (j + d * ten[i + 1]) % x;
update(dp[i + 1][R], d);
}
}
}
}
if (dp[n - 1][y] == -1) {
println("No solution");
} else {
int r = y;
down(i, n - 1, 0) {
cout << dp[i][r];
r -= dp[i][r] * ten[i] % x;
if (r < 0) r += x;
}
cout << endl;
}
【DP 好题】hihoCoder #1520 古老数字的更多相关文章
- POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题
一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...
- (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520
题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请. ...
- dp百题大过关(第一场)
好吧,这名字真是让我想起了某段被某教科书支配的历史.....各种DP题层出不穷,不过终于做完了orz 虽然各种手糊加乱搞,但还是要总结一下. T1 Monkey Banana Problem 这 ...
- dp杂题(根据个人进度选更)
----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...
- hdu 2089 不要62 (数位dp基础题)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- DP刷题记录(持续更新)
DP刷题记录 (本文例题目前大多数都选自算法竞赛进阶指南) TYVJ1071 求两个序列的最长公共上升子序列 设\(f_{i,j}\)表示a中的\(1-i\)与b中色\(1-j\)匹配时所能构成的以\ ...
- DP刷题记录
目录 dp刷题记录 codeforces 706C codeforces 940E BZOJ3997 POJ2279 GYM102082B GYM102082D codeforces132C L3-0 ...
- DP百题练(一)
目录 DP百题练(一) 线性 DP 简述 Arithmetic Progressions [ZJOI2006]物流运输 LG1095 守望者的逃离 LG1103 书本整理 CH5102 移动服务 LG ...
- DP百题练(二)
目录 DP百题练(二) 区间 DP NOI1995 石子合并 IOI1998 Polygon CH5302 金字塔 USACO06FEB Treats for the Cows G/S LG1043 ...
随机推荐
- ZOJ - 4045District Division dfs划分子树
ZOJ - 4045District Division 题目大意:给你n个节点的树,然后让你划分这棵数使得,每一块都恰好k个节点并且两两间是连通的,也就是划分成n/k个连通集,如果可以输出YES,并输 ...
- 灰度图像--图像分割 阈值处理之P-Tile阈值
学习DIP第53天 转载请标明本文出处:***http://blog.csdn.net/tonyshengtan ***,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:http ...
- HDU 1711:Number Sequence(KMP)
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- (六)C语言之隐式转换
- 【黑马JavaSE】1_1_9_流程控制:顺序结构、判断结构、选择结构、循环结构
文章目录 1_1_9_01_ 流程控制概述 1_1_9_01_ 顺序结构 1_1_9_ 判断结构 1_1_9_02_ 判断语句1--if 1_1_9_03_ 判断语句2--if...else 1_1_ ...
- ILSpy C# language support status
C# language support status Asynchronous methods 已经支持 Generalized async return types 还不支持 Async main ...
- Session技术入门代码案例
package com.loaderman.demo; import javax.servlet.ServletException; import javax.servlet.http.*; impo ...
- 如何在gradle项目中添加额外非开源jar包并提交代码
前提:项目开发中,遇到一个地方需要用到公司自定义的jar包,然后要放到代码里又不方便提交到私服 具体实施: 首先在项目中增加一个 libs目录,然后把这种非开源又不在私服上的jar包扔进去, 然后打开 ...
- Python安装远程调试Android需要的扩展脚本
http://android-scripting.googlecode.com/hg/python/ase/android.py 拷贝到/Python27/Lib/site-packages这个目录下 ...
- IntelliJ IDEA 2019 注册码 (激活码) 有效期至2100年
IntelliJ IDEA 2019 注册码 (激活码) 有效期至2100年 本人使用的IDEA是最新版:IntelliJ IDEA 2018.3.3 x64 (IntelliJ IDEA官网下载地址 ...