Final Kichiku “Lanlanshu”
来源:互联网 发布:java数独游戏源码 编辑:程序博客网 时间:2024/05/22 16:48
题目链接
- 题意:
至今也没看懂题目叙述。。。弱菜,看别人程序看懂题意得。。。
给一串字符串,包含‘/’ ‘\’ ‘-’三种,分别表示下一个数比当前大,小,相等。要求出[a, b]区间内,满足要求的数有多少个:要求是,将字符串分成若干段,每段的符号均相同。再将数字也分成若干段,那么数字每一段与字符串的每一段对应,且数字段内相邻数的上升、下降、相等关系应满足对应字符串的符号关系,且每段数字段的数字个数应该大于等于对应符号段的符号个数。 - 分析:
数位DP解决时,状态为[pos][idx][pre],分别表示当前到数字串的第几位,对应的符号串的第几位,当前位的前一位数字是多少
注意前导零的处理即可
const int MAXN = 110;int dp[MAXN][MAXN][10];char comp[MAXN], ipta[MAXN], iptb[MAXN];char* bits;int len, lcp;bool check(int a, int b, char cp){ if (cp == '-') return a == b; else if (cp == '/') return a < b; else return a > b;}int dfs(int pos, int idx, int pre, bool lmt, bool fst){ if (pos == len) { return idx == lcp; } if (!lmt && !fst && ~dp[pos][idx][pre]) return dp[pos][idx][pre]; int e = 9, ret = 0; e = lmt ? bits[pos] - '0' : 9; FE(i, 0, e) { if (fst) ret += dfs(pos + 1, idx, i, lmt && i == e, fst && !i); else { if (idx < lcp && check(pre, i, comp[idx])) ret += dfs(pos + 1, idx + 1, i, lmt && i == e, 0); else if (idx > 0 && check(pre, i, comp[idx - 1])) ret += dfs(pos + 1, idx, i, lmt && i == e, 0); } ret %= MOD; } return lmt || fst ? ret : dp[pos][idx][pre] = ret;}int calc(char x[], bool sub){ CLR(dp, -1); len = strlen(x); int t = 0; while (x[t] == '0') t++; if (t >= len) return 0; if (sub) for (int i = len - 1; i >= t; i--) { if (x[i] != '0') { x[i]--; break; } else { x[i] = '9'; } } bits = x; return dfs(t, 0, 0, true, true);}int main(){ while (~RS(comp)) { lcp = strlen(comp); scanf("%s%s", ipta, iptb); printf("%08d\n", ((calc(iptb, false) - calc(ipta, true)) % MOD + MOD) % MOD); } return 0;}
1 0
- Final Kichiku “Lanlanshu”
- HDU 3886 Final Kichiku “Lanlanshu” 数位DP
- hdu 3886 Final Kichiku “Lanlanshu” (数位dp)
- [数位dp] hdu 3886 Final Kichiku “Lanlanshu”
- HDU 3886 Final Kichiku “Lanlanshu” 数位DP
- 【HDU】3886 Final Kichiku “Lanlanshu” 数位DP
- hdu 3886 Final Kichiku “Lanlanshu(数位DP进阶)
- hdu_3886_Final Kichiku “Lanlanshu”(数位DP)
- hdu 3886 - Final Kichiku “Lanlanshu”(数位dp)多校联合
- final
- final
- final
- final
- final
- final
- final
- Final
- final
- C++ Primer Plus的若干收获--(五)
- poj3624 01背包
- hdu 1394(线段树)
- 感觉自己挺菜的~~
- 《失控》读后感
- Final Kichiku “Lanlanshu”
- 了解RO、RW、ZI和.text .bss .data
- Fire Game(BFS)
- VS2008项目配置宏及定义
- 论新时期数据与学科发展的关系
- HDOJ 4876 ZCC loves cards(搜索)
- 硬件FPGA实现H.265解码统计
- POJ1135&&ZOJ1298--Domino Effect【dijkstra+枚举】
- Oracle EBS R12文件系统结构(学习汇总网上资料)