Mountain NumberFZU-2109

  题目大意:一个大于0的数字x,分写成x=a[0]a[1]a[2][3]..a[n]的形式,(比如x=1234,a[0]=1,a[1]=2,a[3]=3,a[3]=4),Mountain Number要满足对于a[2*i+1]要大于等于a[2*i]和a[2*i+2],给定范围l,r问,有多少个Mountain Number

  就简单的数位dp,照着题意写就行,而且求的是数字,前导0并没有任何影响,对于全0的情况,我们把0也特别视为Mountain Number,也就消除了全0的影响。然后就根据奇偶性判断,奇数位的数要大于等于前一个,偶数位的数要小于等于前一个的数。

  一开始看错题意了,以为要满足a[0]<=a[1]>=a[2],a[1]<=a[2]>=a[3],那么就是a[0]<=a[1]=a[2]=a[3]=..>=a[n],然后写着写着把自己写晕了,仔细看题目才发现,只是对奇数位的数要大于等于前后的数。

 1 #include<cstdio>
 2 int a[36],dp[36][10][2];//dp[i][j][k]第i数位的前一个数是j奇偶性是k的答案
 3 int dfs(int p,int pre,bool jo,bool lim)
 4 {
 5     if(p<0)
 6         return 1;
 7     if(!lim&&dp[p][pre][jo]!=-1)
 8         return dp[p][pre][jo];
 9     int up=(lim ? a[p] : 9),ans=0;
10     for(int i=0;i<=up;i++)
11     {
12         if(!jo&&i<=pre)
13             ans+=dfs(p-1,i,1,lim&&i==a[p]);
14         else if(jo&&i>=pre)
15             ans+=dfs(p-1,i,0,lim&&i==a[p]);
16     }
17     if(!lim)
18         dp[p][pre][jo]=ans;
19     return ans;
20 }
21 int solve(int x)
22 {
23     int n=0;
24     while(x)
25     {
26         a[n++]=x%10;
27         x/=10;
28     }
29     return dfs(n-1,9,0,1);
30 }
31 int main()
32 {
33     int t,l,r;
34     for(int i=0;i<=32;i++)
35         for(int j=0;j<=9;j++)
36             for(int k=0;k<2;k++)
37                 dp[i][j][k]=-1;
38     scanf("%d",&t);
39     while(t--)
40     {
41         scanf("%d%d",&l,&r);
42         printf("%d\n",solve(r)-solve(l-1));
43     }
44     return 0;
45 }

View Code

转载于:https://www.cnblogs.com/LMCC1108/p/10805630.html

Mountain Number FZU-2109数位dp相关推荐

  1. fzu 2109 Mountain Number 数位DP

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2109 题意: 如果一个>0的整数x,满足a[2*i+1] >= a[2*i]和a[2*i+2],则 ...

  2. 链接前导fzu 2109 Mountain Number

    题记:写这篇博客要主是加深自己对链接前导的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 目题链接:http://acm.fzu.edu.cn/problem.php?pid=21 ...

  3. CodeForces - 1560F2 Nearest Beautiful Number (hard version)(二分+数位dp)

    题目链接:点击查看 题目大意:给出一个十进制数字 nnn 和一个约束 kkk,问大于等于 nnn 且满足不同的数位个数小于等于 kkk 的最小的数字是多少 题目分析:自己写的贪心太丑了,就不放上来丢人 ...

  4. HDU 3709 Balanced Number (数位DP)

    题意 求出[x, y] 范围内的平衡数,平衡数定义为:以数中某个位为轴心,两边的数的偏移量为矩,数位权重,使得整个数平衡. 思路 外层枚举平衡点,然后数位DP即可.设计状态: dp[pos][o][l ...

  5. HDU-5197-beautiful number(数位DP)

    beautiful number Problem Description Let A=∑i~n=ai∗10n−i(1≤ai≤9)(n is the number of A's digits). We ...

  6. FZU - 2042 The Mad Mathematician(数位dp)

    题目链接:点击查看 题目大意:给出 A,B,C,D,EA,B,C,D,EA,B,C,D,E,求 sumsumsum 题目分析:数位dp,开五维维护一下状态即可,简单说一下 dpdpdp 的状态: dp ...

  7. HDU - 3709 Balanced Number(数位dp)

    题目链接:点击查看 题目大意:将一串数字视为天平,两端平衡的数字称为平衡数,并求出一段闭区间中平衡数的个数.所谓的平衡条件即为力臂与 力相乘后两端的数量和可以抵消,例如数字4139可以视为以3为中轴的 ...

  8. HDU odd-even number 数位dp

    题意 在l到r区间内求有多少个符合条件"当前数中所有连续的奇数长度是偶数 所有连续的偶数长度是奇数"的个数 分析 典型的数位dp问题 我们设置dp数组时可以根据 dp[pos][p ...

  9. HDU 5787 wolf Number 数位dp

    题意 题目就是说让我们在l到r的数字中求得有多少个连续k为不相同的数 1≤L≤R≤1e18 2≤K≤5 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

最新文章

  1. 机器学习 Softmax classifier (无隐含层)
  2. 成功解决ValueError: Could not interpret input day
  3. ASP.NET中实现模版的动态加载
  4. 详解C调用lua脚本效率测试
  5. 前端学习(1772):前端调试之serverworkers的概念和方法二
  6. jQuery源码解析(1)—— jq基础、data缓存系统
  7. unix iorp等待队列_FreeRTOS+POSIX之消息队列API详解
  8. Bert做不好无监督文本匹配的原因找到了!!
  9. 中国互联网发展报告(2021)
  10. MSF的辅助扫描模块(信息搜集)
  11. (基础)Promise中then()方法使用,多次调用、链式调用
  12. 上偏续关系哈斯图_[离散]哈斯图偏序集--最好理解版本
  13. 万字长文 | 数据分析师的机遇与挑战
  14. 准备学python用什么电脑_超准《IQ测试》,在线《智商测试》
  15. 从关山口到五道口(2019年清华计算机考研全程回顾+经验+总结)
  16. DW怎么把两个html放在一起,用Dreamweaver怎么制作网页
  17. 网站导航怎么设置利于网站SEO优化
  18. IPTV(网络电视)
  19. How to GROUD?
  20. phpstorm配置phpunit组件

热门文章

  1. Object.prototype 原型和原型链
  2. 在ionic/cordova中使用百度地图插件
  3. (hdu 简单题 128道)平方和与立方和(求一个区间的立方和和平方和)
  4. Java并发编程:ThreadLocal
  5. Mysql jdbc driver源码浅析(一)
  6. VS插件的开发 - Visual Studio Addin
  7. netbeans下开发rails快捷键 及 Ruby On Rails开发技巧总结
  8. unity3d]鼠标点击地面人物自动走动(也包含按键wasdspace控制)
  9. 3 MapReduce计算模型
  10. centos7系统根目录扩容