【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 ...
随机推荐
- TensorFlow使用记录 (十四): Multi-task to MNIST + Fashion MNIST
前言 后面工作中有个较重要的 task 是将 YOLOV3 目标检测和 LanNet 车道线检测和到一个网络中训练,特别的是,这两部分数据来自于不同的数据源.这和我之前在 caffe 环境下训练检测整 ...
- CSS 中蒙版相关设置二三事
写 蒙版 时会使用透明度,第一反应会使用 opacity 但这个会使子元素继承,蒙版内还有内容会被影响,从而会设置 background 属性的 rgba 值. 需要注意的是 rgba 和 gba 颜 ...
- Java线程之生命周期
简述 以下类图展示了线程生命周期中不同的状态.我们可以创建一个线程并启动它,但是线程状态从Runnable.Running.Blocked等状态的变化取决于系统线程调度器,java本身并不能完全控制. ...
- linux 查看内网IP和外网IP
centos7 查看内网的ip,使用ifconfig 或在后面加上参数,都可以查看内网的ip,下面的10.105.33.17 即是内网的ip [root@VM_33_17_centos ~]#ifco ...
- $\LaTeX$数学公式大全7
$7\ Arrow\ Symbols$ $\leftarrow$ \leftarrow $\Leftarrow$ \Leftarrow $\rightarrow$ \rightarrow $\Righ ...
- 编译器GCC的Windows版本 : MinGW-w64安装教程
MinGW-w64安装教程 http://rsreland.net/archives/1760
- highcharts柱状图、饼状图
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- Java Web Services面试
Q. 应用集成方式有哪些? A. 应用可以采用以下方式集成: 1. 共享数据库 2. 批量文件传输 3. 远程过程调用(RPC) 4. 通过消息中间件来交换异步信息(MOM) Q. 应用集成可以采用的 ...
- setHasFixedSize(true)的意义 (转)
RecyclerView setHasFixedSize(true)的意义 2017年07月07日 16:23:04 阅读数:6831 <span style="font-size:1 ...
- java实现几种常用排序:冒泡排序
一.冒泡排序介绍 冒泡排序是我们得最多的排序方式之一,原因是简单易实现,且原理易懂.顾名思义,冒泡排序,它的排序过程就像水中的气泡一样,一个一个上浮到水面. 二.冒泡排序原理分析 三.冒泡排序代码实现 ...