HDU6148 Valley Numer
HDU6148 Valley Numer
题目链接
题目大意:
思路
一道很明显的数位dp,不能出现先增后减这种情况,并且前导0是不合法,所以都需要额外的标志记录状态
代码
#include <bits/stdc++.h>
using namespace std;
#define me(a, b) memset(a, b, sizeof(a))
#define IOS() ios::sync_with_stdio(false), cin.tie(0)
#define endl '\n'typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int maxn = 2e5 + 5;
const ll mod = 1e9 + 7;int dp[2][2][3][10][101];
int n;
char s[105];int dfs(int pos, int limit, int zero, int pre, int flag)
{if(pos == n ) return 1;if(dp[limit][zero][flag][pre][pos] != -1)return dp[limit][zero][flag][pre][pos];int ans = 0;for(int i = 0; i < 10; ++i) {int d = s[pos] - '0';if(limit && i > d)break;if(i < pre && flag == 1) {i = pre-1;continue;}if(zero) {ans += dfs(pos+1, limit&&i==d, i==0, i, 0);}else {int x = flag;if(i > pre) x = 1;else if(i < pre) x = 2;ans += dfs(pos+1, limit&&i==d, 0, i, x);}ans %= mod;}return dp[limit][zero][flag][pre][pos] = ans;
}int solve()
{me(dp, -1);cin >> s;n = strlen(s);return (dfs(0, 1, 1, 0, 0) - 1 + mod) % mod;
}int main()
{IOS();int T;cin >> T;while(T--) {cout << solve() << endl;}return 0;
}
总结:
注意前导0以及递增和递减
HDU6148 Valley Numer相关推荐
- 题解HDU6148 Valley Numer(数位DP+深搜DFS)
题解HDU6148 Valley Numer[数位DP+深搜DFS] 题目 解析 参考源码 题目 Description: 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Nu ...
- [hdu6148][Valley Numer]
hdu6148 思路 一个数位dp模板题,注意判断前导0.用一个bz来记录当前是应该增还是可增可减.然后排除不满足条件的情况并进行dp即可. 代码 #include<cstdio> #in ...
- 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 ...
最新文章
- pythonmysql数据库系统实战_Python实战之MySQL数据库操作
- 《UNIX环境高级编程(第3版)》——1.7 出错处理
- Wireshark对HTTPS数据的解密
- SQL避免IN 和 NOT IN
- dubbo常见的一些面试题
- java实现求数组中元素第二大的元素
- WS2811彩带驱动库函数
- python生成三对角矩阵_块三对角矩阵python
- 麦克风的计算机英语词汇,[转帖]麦克风计划:神舟五号载人飞船词汇
- c语言用标准体重判断是否,输入身高、体重、性别,判断是否是标准体重,男性标准=(身高-100)+-3,女性标准=(身高-110)+-3...
- processing 写的规律图形运动
- 找众数的算法代码c语言,寻找众数算法
- destoon网站转移空间教程
- 对Spring IOC的理解
- 2012最新password总结,社工你懂得
- Springboot 整合Retry 实现重试机制
- 技术小白用python搭建微信公众号后台
- WebDAV之葫芦儿•派盘+麻雀记
- iOS ping++支付功能实现
- problem 1205