hdu 3709 Balanced Number 数位DP
2013-09-06 09:30
423 查看
思路:
dp[i][j][k]:表示以j为支点时两边和为k的个数
注意去掉0,00,000……等。
代码如下:
View Code
dp[i][j][k]:表示以j为支点时两边和为k的个数
注意去掉0,00,000……等。
代码如下:
#include<cstdio> #include<cstring> #include<algorithm> #define ll __int64 using namespace std; int bit[20]; ll dp[20][20][2000]; ll dfs(int pos,int pre,int o,bool f) { if(pos==-1) return pre==0; if(!f&&dp[pos][o][pre]!=-1) return dp[pos][o][pre]; ll ans=0; int e=f?bit[pos]:9; for(int i=0;i<=e;i++) ans+=dfs(pos-1,pre+i*(pos-o),o,f&&(i==bit[pos])); if(!f) dp[pos][o][pre]=ans; return ans; } ll cal(ll n) { int m=0; while(n){ bit[m++]=n%10; n/=10; } ll ans=0; for(int o=0;o<m;o++) ans+=dfs(m-1,0,o,1); return ans-(m-1); } int main() { ll n,m; int t; memset(dp,-1,sizeof(dp)); scanf("%d",&t); while(t--){ scanf("%I64d%I64d",&n,&m); printf("%I64d\n",cal(m)-cal(n-1)); } }
View Code
相关文章推荐
- hdu_3709_Balanced Number(数位DP)
- 【HDU 3709】 Balanced Number (数位DP)
- HDU - 3709 Balanced Number (数位DP&记忆化dfs)好题
- HDU 3709: Balanced Number (数位DP)
- HDU 3709 Balanced Number (数位DP)
- HDU - 3709 : Balanced Number (数位dp)
- HDU 3709 Balanced Number(数位dp)
- HDU 3709 Balanced Number(数位dp)
- HDU 3709 Balanced Number (数位DP)
- HDU 3709 Balanced Number(数位DP)
- hdu3709——Balanced Number(数位dp)
- 【HDU】3709 Balanced Number 数位DP
- hdu 3709 Balanced Number (数位DP)
- HDU 3709 Balanced Number (数位DP)
- hdu 3709 Balanced Number(数位DP,5级)
- Hdu 3709 Balanced Number 数位DP
- HDU 3709 Balanced Number [数位DP]【动态规划】
- hdu 3709 Balanced Number(数位dp)
- HDU-3709 Balanced Number (数位DP)
- 【数位dp】HDU - 3709 Balanced Number