HDU-4734 F(x) (数位dp)
来源:互联网 发布:ehviewer网络错误2016 编辑:程序博客网 时间:2024/06/06 14:25
H - F(x)
HDU - 4734题解:数位dp,考虑到T很大,不能每次都清空dp数组
一开始想错了,开了3维数组dp[i][tot][sum],表示当前数位是第i位,F(A)=tot,到当前数位为止的F(x)的值,结果超内存了。
发现只要改变一下就可以变成2维数组:把加法变成减法,dp[i][sum]中sum=F(A)-F(x),只要sum>=0就满足要求
#include<cstdio>#include<algorithm>#include<string.h>using namespace std;typedef long long LL;int len,a[15],dp[11][4610];int dfs(int i,int sum,int mark){ if(sum<0) return 0; if(i==0) return sum>=0; if(mark==0&&dp[i][sum]>=0) return dp[i][sum]; int mx=mark?a[i]:9; int ret=0; for(int j=0;j<=mx;j++){ ret+=dfs(i-1,sum-(1<<(i-1))*j,mark&&j==mx); } if(mark==0) dp[i][sum]=ret; return ret;}int solve(int A,int x){ len=0; while(x) {a[++len]=x%10;x/=10;} int tot=0,tmp=1; while(A){ tot+=tmp*(A%10); tmp*=2; A/=10; } return dfs(len,tot,1);}int main(){ int T,A,B; scanf("%d",&T); memset(dp,-1,sizeof(dp)); for(int cas=1;cas<=T;cas++){ scanf("%d%d",&A,&B); printf("Case #%d: %d\n",cas,solve(A,B)); } return 0;}
0 0
- [HDU 4734]F(x)[数位DP]
- hdu 4734 F(x)(数位DP)
- 简单数位dp-hdu-4734-F(x)
- 【数位DP】 HDU 4734 F(x)
- hdu-4734-F(x)--数位dp
- hdu 4734 F(x) --- 数位dp
- hdu 4734 F(x) (数位dp)
- [数位dp] hdu 4734 F(x)
- hdu 4734 F(x)(数位dp)
- 【HDU】4734 F(x) 数位DP
- HDU 4734 F(x)(数位DP)
- HDU 4734 F(x) (数位DP)
- hdu 4734 F(x) 数位dp
- 【数位DP】 HDU 4734 F(x)
- HDU 4734 F(x)(数位DP)
- HDU 4734 F(X) 数位DP
- Hdu 4734 F(x) (数位dp)
- HDU 4734 F(x) (数位DP)
- 使用IntelliJ IDEA开发SpringMVC网站(一)开发环境
- 字符串转换
- javascript基础(包装类和字符串相关的方法)(二十三)
- jQuery一些特效插件收集
- tx_isolation=READ-COMMITTED +binlog_format=STATEMENT产生的问题
- HDU-4734 F(x) (数位dp)
- 正则表达式入门教程(四)
- Activity生命周期笔记
- asm更改磁盘名 How to rename ASM disks
- 从阿里、微软、AWS财报看评云计算发展
- linux设备驱动归纳总结(四):4.单CPU下竞态和并发
- mysql引擎的介绍、区别及选择
- java设计模式---策略模式
- 【thinkphp 5 在nginx 环境下路由无法生效(404 500错误 )的解决方法】