[hdu6148][Valley Numer]
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]相关推荐
- HDU6148 Valley Numer
HDU6148 Valley Numer 题目链接 题目大意: 思路 一道很明显的数位dp,不能出现先增后减这种情况,并且前导0是不合法,所以都需要额外的标志记录状态 代码 #include < ...
- 题解HDU6148 Valley Numer(数位DP+深搜DFS)
题解HDU6148 Valley Numer[数位DP+深搜DFS] 题目 解析 参考源码 题目 Description: 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Nu ...
- HDU-6148 Valley Numer(数位DP)
题意 如果对于一个 nnn 位数 a" role="presentation" style="position: relative;">aaa ...
- hdu 6149 Valley Numer II(01背包套状压dp)
题目链接:hdu 6149 Valley Numer II 题意: 给你N个点,有k个为高点,其他为低点,现在这N个点有m条边,问你最多能组成多少个两个高点一个低点,低点和两个高点都有边相连这样的状态 ...
- 2017百度之星复赛:1006. Valley Numer(数位DP)
Valley Numer Accepts: 548 Submissions: 1125 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- Valley Numer
Valley Numer dp实在是太难了,做到自闭,但是还是要坚强 这道题是一道数位dp,所谓数位dp就是在某个区间内求满足某个条件的数字的个数总数. 其实对这个题型不是很熟,就单纯讲讲这个题目吧. ...
- HDU 6148 Valley Numer (数位dp)
题意: 求区间内满足非波峰数的个数. 其中波峰 是 先上升 在 下降, 平滑不会影响前面的状态. 思路: 很明显数位dp 令dp[i][j][k] 表示 枚举到数的第i 位, 前一个数字是j ...
- HDU 6148 Valley Numer(数位DP)
Valley Numer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- HDU 6148 - Valley Numer(数位DP)
Valley Numer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
最新文章
- NDK学习笔记-多线程与生产消费模式
- .NET Core 开发之旅 (1. .NET Core R2安装教程及Hello示例)
- mongodb java 多条件查询_MongoDB_Java连接mongo 使用Java多条件查询mongo数据
- C#设置系统日期时间格式
- php外边框样式,CSS中的边框样式
- Mysql和Oracle如何计算QPS和TPS
- php获取脚本运行时间,PHP获取脚本运行时间
- 利用oracle long类型字段,插入大文本
- 【ES6新特性】set对象
- android menu 键值,Android KeyCode安卓手机按键对应键码键值
- 解决 org.gjt.mm.mysql.Driver 报错问题 实测有效
- 算法设计与分析(python版)-作业一
- 关于excel选定任意行截图的操作
- NLP相关书籍和论文综述
- 宇宙浏览器汉化版——Universe
- 中科大和西工大 计算机考研真题,中科大给考6系同学的一点复试建议
- 数学建模竞赛的一些心得体会(全国大学生数学建模首战国一大佬的心得体会)
- mysql分布式主键_技术分享 | 优化 InnoDB 的主键
- 互联网呼唤版权社会化服务
- JS逆向:猿人学爬虫比赛第五题详细题解(下)