hdu6148

思路

一个数位dp模板题,注意判断前导0。用一个bz来记录当前是应该增还是可增可减。然后排除不满足条件的情况并进行dp即可。

代码

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const int mod=1000000007;
ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f;
}
char c[110];
int a[110],n;
ll f[110][20][5];
ll dfs(int pos,int lst,int limit,int fx,int Rea) {//fx为0表示可增可减,fx为1表示只能增 if(pos==n+1) return Rea;if(f[pos][lst][fx]!=-1&&!limit&&Rea) return f[pos][lst][fx];int up=limit?a[pos]:9;ll ans=0;for(int i=up;i>=0;--i) {if(fx==1&&i<lst) break;int p=fx;if(i>lst) p=1;if(!Rea) p=0;ans+=dfs(pos+1,i,limit&&i==up,p,Rea||i);ans%=mod;}if(!limit) f[pos][lst][fx]=ans;return ans;
}
int main() {int T=read();while(T--) {scanf("%s",c+1);n=strlen(c+1);for(int i=1;i<=n;++i)a[i]=c[i]-'0'; memset(f,-1,sizeof(f));printf("%lld\n",dfs(1,10,1,0,0));}return 0;
}

转载于:https://www.cnblogs.com/wxyww/p/9762456.html

[hdu6148][Valley Numer]相关推荐

  1. HDU6148 Valley Numer

    HDU6148 Valley Numer 题目链接 题目大意: 思路 一道很明显的数位dp,不能出现先增后减这种情况,并且前导0是不合法,所以都需要额外的标志记录状态 代码 #include < ...

  2. 题解HDU6148 Valley Numer(数位DP+深搜DFS)

    题解HDU6148 Valley Numer[数位DP+深搜DFS] 题目 解析 参考源码 题目 Description: 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Nu ...

  3. HDU-6148 Valley Numer(数位DP)

    题意 如果对于一个 nnn 位数 a" role="presentation" style="position: relative;">aaa ...

  4. hdu 6149 Valley Numer II(01背包套状压dp)

    题目链接:hdu 6149 Valley Numer II 题意: 给你N个点,有k个为高点,其他为低点,现在这N个点有m条边,问你最多能组成多少个两个高点一个低点,低点和两个高点都有边相连这样的状态 ...

  5. 2017百度之星复赛:1006. Valley Numer(数位DP)

    Valley Numer  Accepts: 548  Submissions: 1125  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  6. Valley Numer

    Valley Numer dp实在是太难了,做到自闭,但是还是要坚强 这道题是一道数位dp,所谓数位dp就是在某个区间内求满足某个条件的数字的个数总数. 其实对这个题型不是很熟,就单纯讲讲这个题目吧. ...

  7. HDU 6148 Valley Numer (数位dp)

    题意: 求区间内满足非波峰数的个数. 其中波峰 是  先上升 在 下降,  平滑不会影响前面的状态. 思路: 很明显数位dp 令dp[i][j][k] 表示  枚举到数的第i 位, 前一个数字是j   ...

  8. HDU 6148 Valley Numer(数位DP)

    Valley Numer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  9. HDU 6148 - Valley Numer(数位DP)

    Valley Numer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

最新文章

  1. NDK学习笔记-多线程与生产消费模式
  2. .NET Core 开发之旅 (1. .NET Core R2安装教程及Hello示例)
  3. mongodb java 多条件查询_MongoDB_Java连接mongo 使用Java多条件查询mongo数据
  4. C#设置系统日期时间格式
  5. php外边框样式,CSS中的边框样式
  6. Mysql和Oracle如何计算QPS和TPS
  7. php获取脚本运行时间,PHP获取脚本运行时间
  8. 利用oracle long类型字段,插入大文本
  9. 【ES6新特性】set对象
  10. android menu 键值,Android KeyCode安卓手机按键对应键码键值
  11. 解决 org.gjt.mm.mysql.Driver 报错问题 实测有效
  12. 算法设计与分析(python版)-作业一
  13. 关于excel选定任意行截图的操作
  14. NLP相关书籍和论文综述
  15. 宇宙浏览器汉化版——Universe
  16. 中科大和西工大 计算机考研真题,中科大给考6系同学的一点复试建议
  17. 数学建模竞赛的一些心得体会(全国大学生数学建模首战国一大佬的心得体会)
  18. mysql分布式主键_技术分享 | 优化 InnoDB 的主键
  19. 互联网呼唤版权社会化服务
  20. JS逆向:猿人学爬虫比赛第五题详细题解(下)

热门文章

  1. 例题 9-8 颜色的长度(Color Length, ACM/ICPC Daejeon 2011, UVa1625)
  2. sklearn+机器学习
  3. TYVJ-P1035 棋盘覆盖
  4. 鸟哥的服务器《十三》Web服务器
  5. Synchonized原理
  6. 恢复VMware误删虚拟机
  7. oracle闪回ddl,Oracle闪回详解
  8. 变身成为互联网设计师
  9. AR红包大战一触即发,2017年会成AR营销元年吗?
  10. 《Node.js区块链开发》PDF版电子书下载