HDU3555 要49 数位DP
2016-02-26 16:14
274 查看
题目大意:数字里面含有连续的49的
思路:
可以先预处理,也可以直接dfs搜索一下,但是要注意有记忆化数组,不然爆栈了
具体的看一下这个人的详细的解释吧,感觉这个模板很好,适合新手看(强调一下,本人也是新手^0^,看了以后感觉很不错,尤其是结合了一下题目)
给出我的代码吧:
思路:
可以先预处理,也可以直接dfs搜索一下,但是要注意有记忆化数组,不然爆栈了
具体的看一下这个人的详细的解释吧,感觉这个模板很好,适合新手看(强调一下,本人也是新手^0^,看了以后感觉很不错,尤其是结合了一下题目)
给出我的代码吧:
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; typedef long long ll; const ll inf = pow(2, 63) - 1; ll dp[25][15][2]; ll bit[25]; ll n; int cnt = 0; ll dfs(ll pos, ll pre, ll status, ll limit){ if (pos < 1) return status; if (!limit && dp[pos][pre][status] != -1) return dp[pos][pre][status]; int end = limit ? bit[pos] : 9; ll res = 0; for (int i = 0; i <= end; i++){ res += dfs(pos - 1, i, status || (pre == 4 && i == 9), limit && (i == end)); } if (!limit) dp[pos][pre][status] = res; return res; } int main(){ int t; scanf("%d", &t); while (t--){ memset(dp, -1, sizeof(dp)); memset(bit, 0, sizeof(bit)); scanf("%I64d", &n); cnt = 0; while (n){ bit[++cnt] = n % 10; n /= 10; } printf("%I64d\n", dfs(cnt, 0, 0, 1)); } return 0; } </cmath></cstring></algorithm></cstdio>
相关文章推荐
- Java中建造者(Builder)设计
- 欢迎使用CSDN-markdown编辑器
- mongoDB 入门指南、示例
- JAVA程序中SQL语句无法传递中文参数
- 测试技术培训:如何测试磁盘写的速度
- 老李分享:webservice是什么?
- 【云计算】docker daemon如何提供Restful的API
- button的标题文字调整位置
- OC实现多继承
- 类的声明,定义及使用
- tomcat服务器配置
- Xcode 便捷插件
- ImageView的xml中scaleType属性解释
- 数组指针和指针数组的区别
- Case of the Zeros and Ones
- 第三章:linux磁盘文件结构
- 生成onvif相关的开发代码
- Python学习笔记 - 5.字符串(find方法,格式操作符%)
- android 使用代码实现 RelativeLayout布局 addRule方法
- golang strconv