Hdu 5803 Zhu’s Math Problem(非记忆化数位dp)
来源:互联网 发布:电脑端怎么看手机淘宝 编辑:程序博客网 时间:2024/05/21 17:07
思路:
数位dp,我们对每个数都拆分为二进制,对于数的每一位都进行考虑,可以发现
如果a+c-b-d<=-2则一定不满足,a+c-b-d有用的值肯定小于等于2,对另外一个不等式也是如此考虑需要注意的一点的本题采用非记忆化搜索,因为有四个上界,四个都不为上界的情况会比较少
#include<bits/stdc++.h>using namespace std;const int MOD=1e9+7;int dig[5][70];int dp[65][2][2][2][2][5][5];void solve(int i,long long num){ for(int j=0;j<64;j++) dig[i][j]=0; int len=0; while(num){ dig[i][len++]=num%2; num/=2; } return ;}void add(int &x,int y){ x+=y; if(x>=MOD) x-=MOD;}int dfs(int pos,int limit1,int limit2,int limit3,int limit4,int w1,int w2){ if(pos==-1) return (w1>0&&w2>=0) ? 1:0; int ans=dp[pos][limit1][limit2][limit3][limit4][w1+2][w2+2]; if(ans!=-1) return ans; ans=0; int last1=(limit1==1 ? dig[1][pos]:1); int last2=(limit2==1 ? dig[2][pos]:1); int last3=(limit3==1 ? dig[3][pos]:1); int last4=(limit4==1 ? dig[4][pos]:1); for(int a=last1;a>=0;a--) for(int b=last2;b>=0;b--) for(int c=last3;c>=0;c--) for(int d=last4;d>=0;d--){ int ww1=a+c-b-d+w1*2; int ww2=a+d-b-c+w2*2; if(ww1<-2||ww2<-2) continue; ww1=min(2,ww1),ww2=min(ww2,2); add(ans,dfs(pos-1,limit1&(a==last1),limit2&(b==last2),limit3&(c==last3),limit4&(d==last4),ww1,ww2)); } dp[pos][limit1][limit2][limit3][limit4][w1+2][w2+2]=ans; return ans;}long long a[5];int main(){ int _; scanf("%d",&_); while(_--){ for(int i=1;i<=4;i++) scanf("%lld",&a[i]),solve(i,a[i]); memset(dp,-1,sizeof(dp)); printf("%d\n",dfs(63,1,1,1,1,0,0)); } return 0;}/*10010000 1000 1000 10000*/
0 0
- Hdu 5803 Zhu’s Math Problem(非记忆化数位dp)
- HDU 5803 Zhu's Math Problem(数位DP)
- HDU5803 Zhu’s Math Problem (数位DP)
- hdu 5803 Zhu’s Math Problem (2016多校第六场1011)数位dp
- hdu 5435 A serious math problem(数位dp)
- hdu 5435 A serious math problem 数位dp
- 数位dp-hdu-3693-Math teacher's homework
- hdu 3693 Math teacher's homework(数位dp)
- HDU 3693 Math teacher's homework (数位DP?)
- hdu 5179 数位dp+记忆化搜索
- hdu 5898 数位dp,记忆化搜索
- HDU - 4352 XHXJ's LIS (数位DP&记忆化dfs&位运算)好题
- HDU 4352 XHXJ's LIS(*数位DP 记忆化搜索 待整理)
- HDU 5106 Bit's Problem 数位DP(求和)
- hihoCoder 1259 A Math Problem 数位dp
- hihoCoder 1259 A Math Problem 数位dp
- uvalive7271(A Math Problem) 数位dp
- HDU - 3652 HDU - 3652 (数位DP&记忆化dfs)
- PAT_乙级 1001 害死人不偿命的(3n+1)猜想
- Node.js学习笔记_模块调用
- UVA 10125 Sumsets .
- 第1章
- 自定义View(一)
- Hdu 5803 Zhu’s Math Problem(非记忆化数位dp)
- LeetCode #104 - Maximum Depth of Binary Tree - Easy
- nginx日志格式及自定义日志配置
- 针对类似淘宝商户注册时用模板生成自己商铺网页的操作
- Python字符串格式化表达
- 网页背景图片自动适应窗口大小的代码
- HDU5952Counting Cliques(dfs)
- java中arraylist与linkedlist区别
- printf相关