数位DP-UESTC
来源:互联网 发布:windows phone 知乎 编辑:程序博客网 时间:2024/06/05 09:55
windy数就是没有前缀0并且相邻之间数的绝对值大于等于2
重点就是对前缀0的处理。感觉写的挺好。
默认 数位dp在计算时前面是有一大群0的,比如 1就是 00001
(看初始位数),如果不去掉是没法计算这个数的。
.
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>/*实现的两个方法1 用状态数组,一个一个加。2 用一个 辅助的数组,储存个数。*/int bit[12];int m,n;int dp[12][10];using namespace std;int dfs(int len,int pre,bool limit,bool first){ if(len<0) return 1; if(!limit&&!first&&dp[len][pre]!=-1) return dp[len][pre]; int u=limit?bit[len]:9; int res=0; for(int i=0;i<=u;i++) { if(first||(!first&&abs(pre-i)>=2)) res+=dfs(len-1,i,limit&&i==u,first&&i==0); } if(!limit&&!first) dp[len][pre]=res; return res;}int solve (int c){ int len=0; memset(bit,0,sizeof(bit)); memset(dp,-1,sizeof(dp)); while(c) { bit[len++]=c%10; c/=10; } //cout<<len<<endl; int all=dfs(len-1,0,true,true);//新来一个数,判断是否有0; return all;}int main(){ while(~scanf("%d%d",&m,&n)) //memset(dp,-1,sizeof(dp)); { memset(bit,0,sizeof(bit)); printf("%d\n",solve(n)-solve(m-1)); } return 0;}
0 0
- uestc 1307 数位DP
- UESTC windy数位dp
- UESTC 250 数位DP
- UESTC-250-数位dp
- 数位DP-UESTC
- UESTC 1307 windy数 数位DP
- UESTC 1307 —— 数位DP
- uestc 1307 windy数 --- 数位DP
- UESTC 250 windy数(数位DP)
- [数位dp] uestc 250 windy数
- uestc 250 数位dp(水)
- uestc 250 windy数 【数位dp】
- UESTC 250 windy数(数位DP)
- UESTC 250 windy数(数位DP)
- uestc 250 windy数 【数位dp】
- UESTC 250 windy数 (数位DP)
- UESTC 1186 Gray code - 简单数位dp
- UESTC 250 windy数 (数位DP)
- 电路工程师需要具备的技能
- 面向对象的三大特性之封装
- WebService的开发手段
- 【算法】程序猿不写代码是不对的52
- 2017-05-04-Facebook出品的Android声明式开源新框架Litho文档翻译-总览和导航
- 数位DP-UESTC
- 一个图片压缩工具
- throw on catch
- STC单片机IO方波脉冲输出
- JS 图片转Base64编码
- LMAX架构
- 蓝桥杯之反幻方
- egret 必须先添加监听再设置skin
- BZOJ 4399: 魔法少女LJJ