hdu 4389 X mod f(x)
来源:互联网 发布:男鞋推荐学生 知乎 编辑:程序博客网 时间:2024/05/22 01:50
hdu 4389 X mod f(x)
很明显要用到数位dp,关键是状态表示的问题
dp[ pos ][ sum ][ mod ][ res ] 好像这思维状态表示缺1不可, 自由位:pos , 前缀和:sum, mod 和 res 表示前缀所表示的数对mod取模的余数为res ,然后记忆化搜索即可
特别要注意的是,每个数的判断要根据他 模上 该数的数位之和来判断 ,所以遇到对 不是该数位之和取模的情况直接 return 0
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int dp[10][80][90][90],digit[11];int dfs(int pos,int prefix,int mod,int res,bool doing){ if(pos<0){ if(prefix==0||mod!=prefix) return 0; return res==0; } if(!doing&&dp[pos][prefix][mod][res]!=-1) return dp[pos][prefix][mod][res]; int end=doing?digit[pos]:9; int ret=0; for(int i=0;i<=end;i++) ret+=dfs(pos-1,prefix+i,mod,(res*10+i)%mod,doing&&i==end); if(!doing) dp[pos][prefix][mod][res]=ret; return ret;}int cal(int n){ int pos=0; for(;n;n/=10) digit[pos++]=n%10; int ret=0; for(int i=1;i<=pos*9;i++) ret+=dfs(pos-1,0,i,0,1); return ret;}int main(){ memset(dp,-1,sizeof(dp)); int T,cas=1; scanf("%d",&T); int l,r; while(T--) { scanf("%d%d",&l,&r); printf("Case %d: %d\n",cas++,cal(r)-cal(l-1)); } return 0;}
- HDU 4389 - X mod f(x)
- hdu 4389 X mod f(x)
- Hdu 4389 X mod f(x)
- HDU 4389 X mod f(x)
- HDU 4389 X mod f(x)
- hdu 4389 X mod f(x) (打表)
- HDU 4389 X mod f(x) 数位统计DP
- HDU 4389 X mod f(x)[数位统计dp]
- HDU 4389 x mod f(x)数位DP
- HDU 4389 X mod f(x) 数位DP
- hdu 4389 X mod f(x)(数位dp)
- HDU 4389 X mod f(x) (数位DP)
- hdu 4389 X mod f(x) (数位DP)
- HDU 4389 X mod f(x) 平方分割 数位DP
- [数位dp] hdu 4389 X mod f(x)
- hdu 4389 X mod f(x) 数位dp
- HDU 4389 X mod f(x) (数位DP)
- hdu 4389 X mod f(x) 数位dp
- OE模块常用表结构
- sqlserver登录问题 error233
- MongoDB与PHP -- 高级查询
- MM 模块主要 T-CODE 和主要使用的表
- 在Linux下面 删除 .svn文件夹
- hdu 4389 X mod f(x)
- 从那一天起,你就成了我的全部
- INV模块常用表结构
- GlusterFS集群文件系统研究
- 海量数据查询优化方法
- rcp(插件开发)屏蔽eclipse的菜单项
- 快速排序(一)
- iOS中Quartz2D的画圆弧问题
- WIP模块常用表结构