2017 百度之星复赛题解 01、03、05
2017-08-18 17:22
225 查看
01、
有个易错点,我卡了好久,就是 1(012)#(1) 答案是1012,我刚开始把012的前导0去掉了。。。
03、
原题
05、
数位DP,记忆化搜索
dp[ p ][ q ][ limit ][ ceng ]:表示前一位是 p,前面处于递增(递减)状态q,当前位上限是多少limit,还有多少位ceng .
根据不同情况递归即可,可以先不写记忆化,先写暴力的,最后加上记忆化。
有个易错点,我卡了好久,就是 1(012)#(1) 答案是1012,我刚开始把012的前导0去掉了。。。
03、
原题
05、
数位DP,记忆化搜索
dp[ p ][ q ][ limit ][ ceng ]:表示前一位是 p,前面处于递增(递减)状态q,当前位上限是多少limit,还有多少位ceng .
根据不同情况递归即可,可以先不写记忆化,先写暴力的,最后加上记忆化。
1 #include<stdio.h> 2 #include<string.h> 3 #define Mod 1000000007 4 #define LL long long 5 LL dp[105][11][11][2]; 6 7 LL dfs(int p, int q, int limit, int ceng){ 8 if(ceng==0){ 9 return 1; 10 } 11 if(dp[ceng][p+1][limit][q]!=-1) return dp[ceng][p+1][limit][q]; 12 13 LL ret = 0; 14 for(int i=0; i<limit; i++){ 15 if(q==0){ // 递减 16 if(p==-1 || i <= p) { 17 if(p==-1 && i==0){ 18 ret += dfs(-1, 0, 10, ceng-1); 19 } else 20 ret += dfs(i, 0, 10, ceng-1); 21 } else { 22 ret += dfs(i, 1, 10, ceng-1); 23 } 24 } else { 25 if(i < p) continue; 26 ret += dfs(i, 1, 10, ceng-1); 27 } 28 ret %= Mod; 29 } 30 31 dp[ceng][p+1][limit][q]=ret; 32 return ret; 33 } 34 35 int main(){ 36 memset(dp, -1, sizeof(dp)); 37 char n[105]; 38 int t; 39 scanf("%d", &t); 40 while(t--){ 41 scanf("%s", &n); 42 LL ans = 0; 43 int len = strlen(n); 44 int u = 0; 45 for(int i=0; i<len; i++){ 46 int limit = n[i]-'0'; 47 int p = i==0?-1:n[i-1]-'0'; 48 49 if(u==2) break; 50 51 ans += dfs(p, u, limit, len-i); 52 ans %= Mod; 53 54 if(u==0){ 55 if(i!=0 && limit>p){ 56 u=1; 57 } 58 } else if(u==1){ 59 if(limit<p){ 60 u=2; 61 } 62 } 63 } 64 printf("%I64d\n", ( (ans - 1 + (u==2?0:1) ) % Mod + Mod ) % Mod ); 65 } 66 return 0; 67 }
相关文章推荐
- 2017"百度之星"程序设计大赛 - 复赛 01,03,05
- HDU 6113 度度熊的01世界【2017"百度之星"】【简单搜索判断联通块】
- 给定一个字符串,里面用空格分开为多个(>=6)部分组合,如:01 02 03 04 05 06 07 …… 写一个函数返回任意6个组合的字符串: 输出格式实例: 01 02 03 04 05 06 0
- 2017_01_03_03_视图
- 2017百度之星初赛(A) 1006 度度熊的01世界(搜索连通块)
- 【2017"百度之星"程序设计大赛 - 初赛(A)】度度熊的01世界
- 2017百度之星初赛:A-1006. 度度熊的01世界(DFS)
- 2017百度之星初赛(A) 1006 度度熊的01世界(bfs找连通块)
- 【HDU6146】【2017百度之星复赛-C】Pokémon GO(动态规划)(dp)
- 百度之星2017初赛A-1006-度度熊的01世界
- 百度之星05-01【连续正整数】
- 百度之星2017初赛题解(A)
- 2017百度之星复赛 1003 Pokémon GO 递推
- 01-Scrum 概述 ,02-橄榄球 VS 软件,03-Scrum敏捷方法一分钟扫盲 ,04-Scrum敏捷方法中的工作产品 ,05-Scrum敏捷方法中的角色,06-Scrum过程-创建和维护产品
- 2017_01_03_01_控制器
- 2017百度之星复赛 hdu 6148 Valley Numer (数位dp)
- 2016"百度之星" - 复赛(Astar Round3) 题解 (待续)
- 2017 百度之星 复赛 Valley Numer(数位dp)
- 2017百度之星复赛:1006. Valley Numer(数位DP)
- [计蒜之道 复赛2017] 题解 (只有 A,E 两题)