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相关推荐

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

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

  2. [hdu6148][Valley Numer]

    hdu6148 思路 一个数位dp模板题,注意判断前导0.用一个bz来记录当前是应该增还是可增可减.然后排除不满足条件的情况并进行dp即可. 代码 #include<cstdio> #in ...

  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. pythonmysql数据库系统实战_Python实战之MySQL数据库操作
  2. 《UNIX环境高级编程(第3版)》——1.7 出错处理
  3. Wireshark对HTTPS数据的解密
  4. SQL避免IN 和 NOT IN
  5. dubbo常见的一些面试题
  6. java实现求数组中元素第二大的元素
  7. WS2811彩带驱动库函数
  8. python生成三对角矩阵_块三对角矩阵python
  9. 麦克风的计算机英语词汇,[转帖]麦克风计划:神舟五号载人飞船词汇
  10. c语言用标准体重判断是否,输入身高、体重、性别,判断是否是标准体重,男性标准=(身高-100)+-3,女性标准=(身高-110)+-3...
  11. processing 写的规律图形运动
  12. 找众数的算法代码c语言,寻找众数算法
  13. destoon网站转移空间教程
  14. 对Spring IOC的理解
  15. 2012最新password总结,社工你懂得
  16. Springboot 整合Retry 实现重试机制
  17. 技术小白用python搭建微信公众号后台
  18. WebDAV之葫芦儿•派盘+麻雀记
  19. iOS ping++支付功能实现
  20. problem 1205

热门文章

  1. VC中的所有WM消息
  2. GitHub 上 100K+ Star 的前端面试开源项目汇总(进大厂必备)
  3. 关于Oracle数据库如何查询非当前用户名命名空间下的表不需要写ower直接from 表名
  4. 雷军在联想演讲:全场无言,除了掌声
  5. Hexo-yilia主题个性化美化及功能添加
  6. 【以太网通信】PHY 芯片回环测试
  7. css 输密码键盘,CSS实现迷你键盘
  8. 优柔但不寡断、柔弱绝不可欺、善良却不可骗、宽容而非懦弱
  9. 谷歌您的个人资料_如何控制其他人可以看到的有关您的Google个人资料的信息
  10. Mozi僵尸网络(P2P僵尸网络Mozi)