hdu 6148(数位dp)
来源:互联网 发布:手机淘宝账号注册流程 编辑:程序博客网 时间:2024/05/29 13:28
题意:找出小于等于n的一直递增或者一直递减或者先递减后递增的数的个数。0不算。
思路:用两个flag分别标记F是否出现了递减和递增,然后直接进行就行。
PS:刚开始打百度之星复赛的时候交上去总是WA,赛后跟过了的队友对拍数据都没有错,GG,但总是过不去。
今天重打一遍之后,AC了。
#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> P;#define fi first#define se second#define INF 0x3f3f3f3f#define clr(x,y) memset(x,y,sizeof x)#define PI acos(-1.0)const int Mod = 1e9 + 7;const int maxn = 100 + 10;char s[maxn];int bits[maxn];ll dp[maxn][10][2][2];ll dfs(int pos,bool lead,bool flag1,bool flag2,int pre,bool flag){ if(pos < 0){if(lead && pre == 0)return 0;return 1;} if(!flag && !lead && dp[pos][pre][flag1][flag2] != -1)return dp[pos][pre][flag1][flag2]; int up = flag ? bits[pos] : 9;ll ret = 0; for(int i = 0; i <= up; i ++) { if(flag2 && i >= pre)ret = (ret + dfs(pos - 1,lead && i == 0,flag1,flag2,i,flag && i == up)) % Mod; else if(flag1 && !flag2) ret = (ret + dfs(pos - 1,lead && i == 0,flag1,i > pre ? true : false,i,flag && i== up)) % Mod; else if(!flag1 && !flag2) { bool t1 = false,t2 = false; if(!lead && i > pre)t2 = true;else if(!lead && i < pre)t1 = true; ret = (ret + dfs(pos - 1,lead && i == 0,t1,t2,i,flag && i == up)) % Mod; } } if(!lead && !flag)dp[pos][pre][flag1][flag2] = ret; return ret;}ll calc(){ int len = 0;for(int i = strlen(s) - 1;i >= 0; i --)bits[len ++] = s[i] - '0'; return dfs(len - 1,true,false,false,-1,true);}int main(){ clr(dp,-1); int Tcase;scanf("%d",&Tcase); while(Tcase --) { scanf("%s",s);printf("%I64d\n",calc()); } return 0;}
阅读全文
2 0
- hdu 6148 数位dp
- hdu 6148(数位dp)
- HDU 6148 数位dp
- HDU 6148 数位DP
- HDU 6148 数位dp
- hdu 6148 (数位dp)
- hdu 6148 Valley Numer 数位dp
- HDU 6148 Valley Numer [数位dp]
- hdu 6148 Valley Numer(数位DP)
- Hdu 6148 Valley Numer 数位DP
- hdu 6148 数位DP(板子 递增递减
- hdu 6148 Valley Numer (数位dp)
- hdu 6148 Valley Numer (数位dp)
- HDU 6148 Valley Numer (数位dp)
- hdu 3555 数位dp
- hdu 3555 数位dp
- HDU 3652 数位DP
- HDU 3555 数位DP
- this引用
- 【深度学习入门—2015MLDS】台湾大学李宏毅MLDS(2015)学习笔记
- iOS开发常用方法的封装
- php 使用面向过程开发博客(1)
- [HDU](2141)Can you find it? ---二分查找(查找)
- hdu 6148(数位dp)
- 从哪里发现用户的需求?
- Lua5.3 虚拟机指令分析(四)分支与跳转
- 【c++】联合、枚举和类型别名
- 使用bottle进行web开发:get的参数传递,form数据传递等
- maven项目数据库不显示数据信息
- 常用的布局管理器
- 数据库视频集锦(1)-总结
- Android Study之自定义View进阶路:掌握绘制基本图形(一)